我正在将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中的一个错误吗?
感谢您的反馈。
答案 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请分享链接。我可以克隆并调整它以证明问题。