1

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')ん。JSON データは非常に単純です。plist.get('id')undefined

{
    "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ため、データは正常にロードされますが、期待する適切なモデルが返されません。

4

1 に答える 1

2

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 - ソース。

promise の詳細 - http://emberjs.com/guides/routing/asynchronous-routing/

于 2013-10-31T23:39:48.210 に答える