ember.js - 在 PUT 请求中包含响应时,Ember Data 重新加载关联

标签 ember.js 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但我返回了 200 OK使用模型的 JSON 序列化作为响应,例如:
{
  child: {
    parent: 1
  }
}

不幸的是,这会导致重新加载父级。所以在此之后,对 /parents/1 的 GET 请求由 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);
}

关于ember.js - 在 PUT 请求中包含响应时,Ember Data 重新加载关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486542/

相关文章:

javascript - Ember.js 每个助手不显示在条件中

javascript - mongoose & ember,记录拒绝原因: typeerror

ember.js - 在 ember-cli 应用程序中哪里添加 css 和 js 文件?

javascript - 如何在 ember-engines 中使用 in-repo-addons?

javascript - 覆盖 Ember 2.x 核心组件中的 "view"级别属性

javascript - ember-dev-fixtures 错误 : "Assertion Failed: The response from a findAll must be an Array, not undefined"

javascript - Ember-data DS.Model 中的私有(private)变量

javascript - Ember-data: DS.attr ("number")应该如何工作?

ember.js - 无法使用 ember.js 和 ember-data 获取嵌入的对象属性

ember.js - 使用异步回调反序列化