在状态root.loaded.updated.inFlight中尝试处理事件`willCommit`

con*_*com 3 javascript ember.js

我正在通过"入门"页面的入门教程学习如何使用EmberJS.但是,当我进入"接受编辑"部分时,我有一个错误:

Uncaught Error: Attempted to handle event `willCommit` on <Todos.Todo:ember304:3> while in state root.loaded.updated.inFlight. 
Run Code Online (Sandbox Code Playgroud)

呼叫Todos.TodoController.acceptChanges()似乎触发了这个错误.我所指的部分是这一部分:http: //emberjs.com/guides/getting-started/accepting-edits/

在阅读了Ember的模型生命周期后 - http://emberjs.com/guides/models/model-lifecycle/#toc_in-flight-我仍然不明白为什么会出现这个错误.

一个解决方法是每次更改模型时保存模型(因此每次更改的值都是如此<input>.这样可以正常工作,但使用HTTP API可能表现不佳(而不是固件).

这可能是由于BC破坏了ember-datalib的变化吗?还有什么可能导致这个?


我用过的库的版本:

jQuery:2.0.3

把手1.0.0

EmberJS:1.0.0 RC7

Ember数据:v0.13-102-g6bdebe7

int*_*xel 10

在阅读了Ember的模型生命周期后 - http://emberjs.com/guides/models/model-lifecycle/#toc_in-flight-我仍然不明白为什么会出现这个错误.

这不是一个错误,飞行中的部分说的就是这一切:

正在传输的记录是已提供给适配器以保存本地更改的脏记录.一旦服务器确认已成功保存更改,记录将变为干净.

这意味着您正在尝试更改记录,而之前的更改使其变脏并且可能的调用this.get('store').save()仍在执行中,例如等待服务器响应.在此时间范围内,您无法在不收到错误的情况下对同一记录进行更改.

因此,一个解决方案可能是this.get('store').save()在文本框的字符发生变化之后不会触发,而是在焦点输出之后,或者甚至使用显式按钮来保存您可以禁用的记录,直到您的服务器确认它的更改为止,这不会产生请求服务器上的每个字符,由于某些延迟导致性能低下.希望这是有道理的.

希望能帮助到你.