在PUT请求中包含响应时,Ember Data会重新加载关联 [英] Ember Data reloads associations when including a response in a PUT request
问题描述
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
,但是我将模型的JSON序列化返回一个 200 OK
回复,例如:
{
child:{
parent:1
}
}
不幸的是,这会导致父母重新加载。所以就这样,Ember Data发出一个GET请求给$ code> / parents / 1 。如何防止这种情况发生?
这听起来像是返回部分结果?
我没有看到在正确的地方处理部分更新的Interwebs的适当解决方案。这可能或可能不会解决您的问题,但它可以帮助那些由于部分结果而遇到类似问题的人。
您可以尝试覆盖您的应用程序序列化程序中的extractUpdateRecord
或您返回部分结果的那些用例的特定模型序列化程序。
以下是默认实现:
/ **
`extractUpdateRecord`是在
a调用时使用的提取方法的钩子到`DS.Store#update`。默认情况下,此方法为[extractSave](#method_extractSave)的别名
。
@method extractUpdateRecord
@param {DS.Store} store
@param {DS.Model的子类}键入
@param {Object}有效负载
@param {String或Number} id
@param {String} requestType
@return {Object} json反序列化的有效负载
* /
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);
}
I have the following simple child-parent relationship.
App.Parent = DS.Model.extend({
children: DS.hasMany('child')
});
App.Child = DS.Model.extend({
parent: DS.belongsTo('parent')
});
I have a situation where I update an instance of a Child
and persist the changes with a save()
. This issues a PUT request. Usually, a PUT request returns a 204 No Content
but I return a 200 OK
with a JSON serialization of the model as the response, e.g.:
{
child: {
parent: 1
}
}
Unfortunately, this causes a reload of the parent. So right after this, a GET request to /parents/1
is issued by Ember Data. How can I prevent this from happening?
It sounds like you are returning partial results?
I haven't seen an appropriate solution on the interwebs that deals with partial updates in the right place. This may or may not fix your problem, but it could assist those who are having a similar issue because of partial results.
You could try overriding extractUpdateRecord
in either your Application serializer, or on particular model serializers for those use cases where you return partial results.
Here is the default implementation:
/**
`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);
},
You will need to serialize the record to JSON and then merge in the payload data to update it. Something like the following:
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);
}
这篇关于在PUT请求中包含响应时,Ember Data会重新加载关联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!