【问题标题】:How can I use a Custom Channel of Action Cable with Stimulus Reflex and View Component?如何使用带有刺激反射和视图组件的自定义通道电缆?
【发布时间】:2020-11-10 03:43:13
【问题描述】:

所以,我正在开发一个项目,该项目应该具有与linkedin 聊天相同的聊天组件,用户将在其中拥有所有联系人和消息。

但是,我已经尝试了所有方法来使用 stimulus_reflexview_component 来创建这个 chat_box,但直到现在我没有任何进展。

所以现在我正在尝试使用纯 action_cable 创建聊天,但我的疑问是:我可以将这个 action_cable 频道 ('ChatRoom')Stimulus Reflex 一起使用吗?因为当我们看到 Rails 控制台显示如下内容时:Broadcasting to StimulusReflex::Channel:1, and I want to Broadcasting to the ChatRoom Channel.

有人尝试过吗?

【问题讨论】:

  • 我希望我能回答你的问题,但对于 StimulusReflex,目前你最好的选择是在不和谐discord.com/invite/XveN625 上获得帮助

标签: ruby-on-rails actioncable stimulusjs view-components stimulus-reflex


【解决方案1】:

stimulus_reflex 会在反射后使用自己的频道更新页面。但是这些更新是自动发生的,并且只针对触发反射的用户。通常你不想碰那些部分。

如果您想在反射后广播消息或 dom 转换,可以使用 cable_ready(包含在 stimulus_reflex 中。

所以这样的事情可能对你有用:

def my_reflex
  @chat = Chat.find(element.dataset[:chat_id])
  message = @chat.message.create(message: element.value)
  cable_ready["chatroom-#{@chat.id}"]. insert_adjacent_html(
    selector: "#chat",
    position: "beforeEnd",
    html: ApplicationController.render(ChatMessageComponent.new(message: message))                     
  )
end

更多可能性,您可以查看cable_ready documentation

【讨论】:

  • 我试过这种方式,但对我不起作用。我决定使用纯 Action Cable 以使我的聊天按预期工作。我在反射方面有一些不好的经历。
【解决方案2】:

我还不能发表评论,所以我必须写它作为答案。看起来 Roland 错过了 cable_ready 动作的实际广播。

def my_reflex
  @chat = Chat.find(element.dataset[:chat_id])
  message = @chat.message.create(message: element.value)
  cable_ready["chatroom-#{@chat.id}"]. insert_adjacent_html(
    selector: "#chat",
    position: "beforeEnd",
    html: 
   ApplicationController.render(ChatMessageComponent.new(message: message))                     
  )

  cable_ready.broadcast
end

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 2022-06-25
    • 1970-01-01
    • 2020-11-01
    • 2018-09-28
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多