我有一對一和一對多關係的深層嵌套模型。最初,我使用標準的ember-data API從服務器檢索這個模型。從JSON刷新模型
我現在需要做的是從AJAX調用檢索的普通JSON更新模型(及其所有關係)。
我不能使用reload()
方法,因爲這會產生額外的HTTP請求 - 我已經擁有JSON負載,因此不需要額外的HTTP請求。
有沒有辦法從JSON重新加載模型?
我有一對一和一對多關係的深層嵌套模型。最初,我使用標準的ember-data API從服務器檢索這個模型。從JSON刷新模型
我現在需要做的是從AJAX調用檢索的普通JSON更新模型(及其所有關係)。
我不能使用reload()
方法,因爲這會產生額外的HTTP請求 - 我已經擁有JSON負載,因此不需要額外的HTTP請求。
有沒有辦法從JSON重新加載模型?
您可以使用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
您可以使用[pushPayload(https://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload)加新的記錄器並更新商店中的現有記錄。 – kumkanillam
@kumkanillam謝謝,這有幫助 - 你想發佈它作爲答案,所以我可以接受它? (順便說一句,我需要在調用pushPayload之前還原模型上的所有舊更改 - 否則它不會更新模型) – Igor