【问题标题】:Why does Ember Data do a POST for an existing record?为什么 Ember Data 对现有记录执行 POST?
【发布时间】:2014-01-06 11:57:31
【问题描述】:

从服务器获取多条记录后,我将它们交给(数组)控制器。记录数组显示在表格中,并且可以通过拖放修改记录的顺序。每次删除后,每条记录的sort 属性都会更新以反映新的排序顺序。

保存记录会触发对某些记录的PUT 请求和对其他记录的POST 请求。这可能是什么原因?奇怪的是POST 请求包含记录的id。我假设任何具有有效id 的记录都会触发PUT 请求。

为了清楚起见,我使用 Ember Data 作为应用程序的模型层。

App.ProjectsIndexController = Ember.ArrayController.extend({
  sortProperties: ['sort'],

  updateSortOrder: function() {
    this.beginPropertyChanges();
    this.forEach(function(project) {
      // UPDATE PROJECT
    }, this);
    this.endPropertyChanges();

    this.forEach(function(project) {
      project.save();
    });
  }
});

更新:在进一步调试此问题后,我注意到 Ember Data 为其中一条记录创建了一条新记录,这解释了为什么会触发 POST 请求。但是,不清楚为什么要为具有有效id 的现有记录创建记录。

【问题讨论】:

  • Hmm.. 设置了 id 并不意味着 Ember 将根据定义假定它是现有记录(因此使用 PUT)。我很想看到更多代码/上下文。如果你想创建一个 jsbin,这里有一个带有 ember 数据的模板:jsbin.com/ogorab/316/edit.
  • 确实如此,但我的意思是说id 包含在初始提取的响应中,这应该表明 Ember Data 它是现有记录。

标签: ember.js ember-data


【解决方案1】:

Ember Data 是一个相当复杂的模型层,我遇到的错误是由于我对它的缺乏经验造成的。

在我的一个模型中,我创建了一个名为 isNew 的计算属性。我应该选择一个更好的名字。每个 Ember Data 模型都有许多返回模型状态信息的方法,例如 isSaving、isDirty、isLoaded 和 ...isNew。

通过在我的模型类中覆盖isNew 方法,当模型是新记录(保存时触发POST 请求)或现有记录(保存时触发PUT 请求)时,我会通知商店.您可以找到模型属性的完整列表at the Ember website。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多