在PUT请求中包含响应时,Ember Data会重新加载关联 [英] Ember Data reloads associations when including a response in a PUT request

查看:145
本文介绍了在PUT请求中包含响应时,Ember Data会重新加载关联的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆