当 PUT 请求中包含响应时,Ember Data 会重新加载关联

2024-03-14

我有以下简单的亲子关系。

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
  }
}

不幸的是,这会导致父级重新加载。紧接着,一个 GET 请求/parents/1由 Ember Data 发行。我怎样才能防止这种情况发生?


听起来您正在返回部分结果?

我还没有在互联网上看到适当的解决方案来处理正确位置的部分更新。这可能会也可能不会解决您的问题,但它可以帮助那些因部分结果而遇到类似问题的人。

你可以尝试覆盖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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 PUT 请求中包含响应时,Ember Data 会重新加载关联 的相关文章

随机推荐