gpt4 book ai didi

ember.js - 通过 Faye/websockets 订阅更新会导致重复记录

转载 作者:行者123 更新时间:2023-12-04 20:44:08 25 4
gpt4 key购买 nike

更新

演示: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
  • 消息再次插入到 View 中(当然它应该与原始消息合并,但那个仍然没有被分配一个 id)
  • ajax调用解决了,分配了原消息的id。

  • 这会导致重复的消息,按以下顺序:
  • [消息来自createRecord , 将通过 ajax 响应解决]
  • [通过 pushPayload 插入的消息/Faye]

  • 我希望你能理解到目前为止。一个解决方案是让 Faye 在推送有效负载之前等待保存调用解析。不幸的是,我没有对正在保存的记录的引用(发生在 Controller 中,faye 订阅设置在 ApplicationRouter 中)。

    我也希望它以通用的方式工作:)

    最佳答案

    终于找到了解决方案,但仍然欢迎其他建议。

    原来是 Store#didSaveRecord记录保存后更新id。通过覆盖这个方法(然后按顺序调用 super),我们可以首先检查该 id 的记录是否已经存在:

    App.Store = DS.Store.extend
    didSaveRecord: (record, data) ->
    # This will remove any existing records with the same id
    @getById(record.constructor, data.id)?.unloadRecord()
    @_super(record, data)

    关于ember.js - 通过 Faye/websockets 订阅更新会导致重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20843893/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com