我有以下Emberjs數據模型:Emberjs數據如何加載的hasMany-數據後
App.File = DS.Model.extend({
like: DS.attr('boolean'),
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
file: DS.belongsTo('App.File'),
comment: DS.attr('string')
});
而且隨着預載:
App.store.load(App.File, {id: 1, like: false});
現在我想,如果我得到這樣的評論:
var f = App.store.find(App.File, 1);
var c = f.get("comments");
var c是一個空的EmberArray,併發送一個請求到服務器。但我沒有收到請求?爲什麼以及如何做到這一點?我真的不想預先發表評論。
更進一步,如果我添加評論,但也同時更改文件:
f.get("comments").createRecord({comment: "test"});
f.set("like", true);
App.store.commit();
兩個請求被髮送到服務器。但是,如果我然後返回以下JSON(文件):
{ "id": 1, like: true }
我的第一個可見的評論再次消失。爲什麼?我該怎麼做?
感謝您的幫助!
感謝您的快速回答。好。沒有其他辦法嗎?這種方式導致更多的數據查詢,這在大多數情況下,我不需要。而且這對第二個問題沒有幫助,因爲對服務器的第一個請求是對文件更新的請求。第二個請求是添加註釋請求。如果我在createRecord之後添加第二個提交命令,可能會起作用。 –
我會優先使用findQuery使用的機制。第一次使用comments屬性時,findQuery將被傳遞給服務器。 –
我遇到了類似的問題。如果不是要求findMany調用的id,而是使用外鍵支持通過findQuery獲取,那將會很好。我決定只在運行findQuery的模型中添加一個「getComments」方法。 – jhorman