アプリのどこかで、サーバーが一度に多数のレコードを返します。Ember でこれを処理する方法は次のようなものです。
$.each(json["foos"], function(idx, val){
DS.get('defaultStore').load(App.Foo, val)
});
アソシエーション以外は問題なく動作します。私が以下を持っている場合:
App.Dad = DS.Model.extend({
sons: DS.hasMany('App.Son')
})
App.Son = DS.Model.extend({
dad: DS.belongsTo('App.Dad')
})
コードで私が行う場合:
$.each(json["dads"], function(idx, val){
DS.get('defaultStore').load(App.Dad, val)
});
$.each(json["sons"], function(idx, val){
DS.get('defaultStore').load(App.Son, val)
});
次に、各息子は父親について「知っています」(私はできますa_son.get('dad')
)が、父親は息子について知りません:a_dad.get('sons').get('length')
0を返します。
その理由は、お父さんをロードしたときに、彼の息子がまだロードされていないためだと思います。しかし、これを機能させる方法はありますか?
次のように「手動で」実行できます。
$.each(json["sons"], function(idx, val){
DS.get('defaultStore').load(App.Son, val);
App.Dad.find(val.dad_id).get('sons').pushObject(App.Son.find(val.id));
});
しかし、これをしなければならないのは奇妙に思えます。
これを説明するために JSFiddle をまとめました: http://jsfiddle.net/eq8pB/1/
ありがとう!
PJ