使用JSON API从服务器响应409后,Ember模型保持“inFlight”状态

时间:2015-08-08 13:35:03

标签: ember.js ember-data

我正在将Ember和Ember Data升级到1.13.x.我切换到使用新的JSON API适配器/序列化程序,并且还更改了服务器响应以符合JSON API格式。但是我遇到了错误处理方案的问题。在遵循快乐路径时,模型会得到正确更新,但是当更新需要失败时,因为乐观锁会检测到同时更新,那么我会让模型陷入“inFlight”状态。

这是一个示例请求:

{
  data: {
    id: "1",
    type: "books",
    attributes: {
      name: "New Book Name",
      version: 1
    }
  }
}

服务器发现当前版本大于1,并使用409 HTTP状态代码拒绝更新,响应为:

{
  errors: [{
    code: "2",
    detail: "Simultaneous changes.",
    source: { 
      pointer: "data" 
    },
    status: "409"
  }]
}

问题是服务器响应后我的模型处于“root.loaded.updated.inFlight”状态。 即使在调用model.rollbackAttributes()之后,状态也不会改变。

这是服务器响应JSON中的问题吗?这是Ember Data中的一个错误吗?

感谢您的反馈。

1 个答案:

答案 0 :(得分:0)

似乎在JSONAPIAdapter中覆盖“handleResponse”导致问题。更具体地说,从“handleResponse”返回$html = @' <li> test </li> </ul> '@ $regex = '(?s)(^.*<li>.*\</ul>)' $html | Select-String $regex -AllMatches | Select -Expand Matches | select -expand Value 个对象。

我按照迁移指南中提供的模式覆盖handleResponse - http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html#toc_new-errors-api

不覆盖“handleResponse”解决问题。

我尝试创建一个JSBin来报告这是一个错误,但我在设置JSBin中的JSONAPIAdapter(在哪里覆盖“handleResponse”)时遇到了问题。如果有人有方便的JSBin明确设置JSONAPIAdapter请分享链接。我可以克隆并调整它以证明问题。