2017-06-19 32 views
2

我有一對一和一對多關係的深層嵌套模型。最初,我使用標準的ember-data API從服務器檢索這個模型。從JSON刷新模型

我現在需要做的是從AJAX調用檢索的普通JSON更新模型(及其所有關係)。

我不能使用reload()方法,因爲這會產生額外的HTTP請求 - 我已經擁有JSON負載,因此不需要額外的HTTP請求。

有沒有辦法從JSON重新加載模型?

+1

您可以使用[pushPayload(https://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload)加新的記錄器並更新商店中的現有記錄。 – kumkanillam

+0

@kumkanillam謝謝,這有幫助 - 你想發佈它作爲答案,所以我可以接受它? (順便說一句,我需要在調用pushPayload之前還原模型上的所有舊更改 - 否則它不會更新模型) – Igor

回答

1

您可以使用pushPayload/push添加新記錄並更新商店中的現有記錄。

要恢復所有舊的更改,可以通過peekAll從商店獲取所有記錄,並將其迭代爲hasDirtyAttributes,如果其爲true,則從商店卸載它。之後,您可以使用pushPayload將不兼容的記錄更新到商店中。

let allRecords = this.get('store').peekAll('modelname') 
let dirtiedRecords = allRecords.filterBy('hasDirtyAttributes',true); 
dirtiedRecords.forEach((item) =>{ 
item.unloadRecord(); 
}); 
//after that you can use pushPayload the result you got it from Ajax call. 

參見:
https://emberjs.com/api/data/classes/DS.Model.html#property_hasDirtyAttributes https://emberjs.com/api/classes/Ember.Enumerable.html#method_filterBy https://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload