我有一个深度嵌套的模型,具有一对一和一对多的关系。最初,我使用标准的ember-data API从服务器检索了这个模型。
我现在需要做的是从AJAX调用检索到的普通JSON中更新模型(及其所有关系)。
我无法使用reload()
方法,因为这会产生额外的HTTP请求 - 我已经拥有JSON有效负载,因此不需要额外的HTTP请求。
有没有办法从JSON重新加载模型?
答案 0 :(得分:1)
您可以使用pushPayload/push
添加新记录并更新商店中的现有记录。
要恢复所有旧更改,您可以通过peekAll从store获取所有记录,并为hasDirtyAttributes
迭代它,如果它是true,则从存储中卸载它。之后,您可以使用pushPayload将incomind记录更新到商店。
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