Ember.js - 余烬数据不返回模型

Ember.js - Ember Data not returning a model

本文关键字:返回 模型 数据 余烬 js Ember      更新时间:2023-09-26

我正在使用Ember Data来检索包含歌曲的播放列表。代码为:

App.PlaylistRoute = Em.Route.extend({
    model: function(params) {
        var plist = this.store.find('playlist', params.id);
        console.log(plist);
        return [];
    }
})
App.Playlist = DS.Model.extend({
    beats: DS.hasMany('beat')
});
App.Beat = DS.Model.extend({
    name: DS.attr('string') 
});

此代码的问题在于它工作并返回数据,但在一个模糊的对象中,而不是在模型中。然后我不能做plist.get('beats')plist.get('id')因为它只是返回undefined.JSON数据非常简单:

{
    "playlist": {
        "id": "popular-beats",
        "beats": [
            "1",
            "2"
        ]
    },
    "beats": [
        {
            "id": "1",
            "name": "Name"
        },
        {
            "id": "2",
            "name": "Another Name"
        }
    ]
}

当我在控制台中记录数组时,返回的对象如下:

__ember1383247403867: "ember293"
__ember1383247403867_meta: e
_super: undefined
content: s
isFulfilled: true
toString: function (){return e}
__proto__: Object

如果我向下钻取content._data我会找到beats数组 - 因此数据已成功加载,但它没有返回我期望的正确模型。

store.find() 不会立即返回模型对象,它返回 promise,将来将包含 'beats' 和 'id' 属性。 因此,您可以在模板中使用模型,并且模型更新时模板将更新。

http://emberjs.jsbin.com/oTEvIwe/3 - 这是一个基于您的路由器和型号的 Ember 应用程序。在控制台中,您可以看到 plist.get('beats') 在 router#model 中未定义,但 HTML 页面包含它。

如果你想在路由器中使用模型进行操作,你可以使用setupController。

http://emberjs.jsbin.com/oTEvIwe/3/edit - 来源。

更多关于承诺 - http://emberjs.com/guides/routing/asynchronous-routing/