【发布时间】:2013-12-30 16:53:53
【问题描述】:
更新
演示:http://jsbin.com/ogorab/311/edit
我正在尝试构建一个使用 Faye/Websockets 实时更新的简单聊天室。消息使用常规 REST 发布,但也有通过 Faye 订阅 /messages/created,它使用 store.pushPayload 推送新消息。
现在发生了以下情况,我可以看到问题出在哪里,但我不知道如何解决它:
- 用户提交聊天消息
-
ChatController处理提交,使用聊天消息调用createRecord,随后 #save - 聊天消息会立即显示在聊天中(由
createRecord触发)。请注意,尚未分配id。 - 向服务器发送 REST 请求
- 服务器首先将消息发布给Faye
- 服务器响应 REST 请求
- 在 ajax 调用解决之前,一条消息已到达 /messages/created
- 消息再次插入到视图中(它当然应该与原始消息合并,但还没有分配一个 id)
- ajax 调用被解析,原始消息的 id 被分配。
这会导致重复消息,按以下顺序:
- [来自
createRecord的消息,将通过ajax响应解决] - [通过
pushPayload/Faye 插入的消息]
我希望你能理解到目前为止。一个解决方案是让 Faye 在推送有效负载之前等待保存调用解决。不幸的是,我没有对正在保存的记录的引用(发生在控制器中,faye 订阅设置在ApplicationRouter)。
我也希望它以通用的方式工作:)
【问题讨论】:
标签: ember.js ember-data