从 JSON 刷新模型
Refresh model from JSON
我有一个具有一对一和一对多关系的深层嵌套模型。最初我使用标准 ember-data API.
从服务器检索了这个模型
我现在需要做的是从 AJAX 调用检索到的普通 JSON 更新模型(及其所有关系)。
我不能使用 reload()
方法,因为那样会产生额外的 HTTP 请求 - 我已经有了 JSON 负载,所以不需要额外的 HTTP 请求。
有没有办法从 JSON 重新加载模型?
您可以使用 pushPayload/push
添加新记录和更新商店中的现有记录。
要还原所有旧更改,您可以通过 peekAll 从存储中获取所有记录,并对其进行迭代 hasDirtyAttributes
,如果为真,则将其从存储中卸载。之后,您可以使用 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
我有一个具有一对一和一对多关系的深层嵌套模型。最初我使用标准 ember-data API.
从服务器检索了这个模型我现在需要做的是从 AJAX 调用检索到的普通 JSON 更新模型(及其所有关系)。
我不能使用 reload()
方法,因为那样会产生额外的 HTTP 请求 - 我已经有了 JSON 负载,所以不需要额外的 HTTP 请求。
有没有办法从 JSON 重新加载模型?
您可以使用 pushPayload/push
添加新记录和更新商店中的现有记录。
要还原所有旧更改,您可以通过 peekAll 从存储中获取所有记录,并对其进行迭代 hasDirtyAttributes
,如果为真,则将其从存储中卸载。之后,您可以使用 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