我有以下简单的子父关系。
App.Parent = DS.Model.extend({
children: DS.hasMany('child')
});
App.Child = DS.Model.extend({
parent: DS.belongsTo('parent')
});
我遇到的情况是更新Child
的实例,并使用save()
保留更改。这会发出PUT请求。通常,PUT请求返回204 No Content
,但我返回一个200 OK
,其中模型的JSON序列化作为响应,例如:
{
child: {
parent: 1
}
}
不幸的是,这导致父母的重新加载。所以在此之后,Ember Data发出了对/parents/1
的GET请求。我怎样才能防止这种情况发生?
答案 0 :(得分:1)
听起来你回复了部分结果?
我还没有在互联网上看到适当的解决方案,可以在正确的地方处理部分更新。这可能会或可能不会解决您的问题,但它可以帮助那些由于部分结果而遇到类似问题的人。
您可以尝试在应用程序序列化程序中覆盖extractUpdateRecord
,或者在特定模型序列化程序中覆盖返回部分结果的用例。
这是默认实现:
/**
`extractUpdateRecord` is a hook into the extract method used when
a call is made to `DS.Store#update`. By default this method is alias
for [extractSave](#method_extractSave).
@method extractUpdateRecord
@param {DS.Store} store
@param {subclass of DS.Model} type
@param {Object} payload
@param {String or Number} id
@param {String} requestType
@return {Object} json The deserialized payload
*/
extractUpdateRecord: function(store, type, payload, id, requestType) {
return this.extractSave(store, type, payload, id, requestType);
},
您需要将记录序列化为JSON,然后合并有效负载数据以更新它。如下所示:
extractUpdateRecord: function(store, type, payload, id, requestType) {
var record = store.getById(type, id);
var currentData = record.toJSON();
var newData = this.extractSave(store, type, payload, id, requestType);
return Ember.merge(currentData, newData);
}