3

我的 Ember/Ember-Data/Rails 应用程序使用 WebSockets 将数据推送到客户端。我正在使用 Ember-Data 的 loadMany 方法将推送的数据添加到存储中。

但是,如果当前正在编辑和保存任何推送的记录,则 loadMany 将失败,因为该记录当前处于 inFlight 状态。例如:

-> 用户编辑记录并点击保存
-> Ember-Data 开始提交当前事务
-> Rails 控制器响应此记录的更新 JSON 并通过 WebSockets 发布更新数据
-> 在事务完成之前接收到 WebSockets 数据,Ember -在记录被标记为干净之前,数据尝试使用此新数据更新记录

我发现的唯一解决方案是使用 Ember.run.later 延迟应用更新,超时时间约为 20 毫秒。(Ember.run.next 不起作用。)

但是,这只处理用户刚刚保存记录的情况。如果巧合的是,用户当前正在编辑的记录被其他人编辑,并且在事务完成之前收到推送更新,那么冲突仍然会发生并触发错误。

所以我的问题是,有没有办法:

(a) 防止商店在受影响的记录进行中时尝试加载更改;或者 (b) 延迟推送更新,直到所有事务都清理干净?

4

1 回答 1

1

*crickets*

现在,我已经通过手动检查记录是否处于不可更新状态来解决这个问题,如果是,则在它退出该状态时注册一个回调。然后在回调之后,我检查推送更新是否具有updatedAt比记录更新的值,如果是,则合并两者。

于 2013-03-12T02:43:45.233 回答