如何使用带有刺激反射和视图组件的自定义动作通道?
How can I use a Custom Channel of Action Cable with Stimulus Reflex and View Component?
所以,我正在开发一个项目,该项目应该有一个与 linkedin 聊天相同的聊天组件,用户将在其中拥有他们的所有联系人和消息。
但是,我尝试了所有与 stimulus_reflex
和 view_component
合作的方法来创建这个 chat_box
,但直到现在我取得了 none 的进展。
所以现在我正在尝试与纯 action_cable 聊天,但我的疑问是:我可以将此 action_cable 频道 ('ChatRoom')
与 Stimulus Reflex
一起使用吗?因为当我们看到 rails 控制台显示如下内容时:Broadcasting to StimulusReflex::Channel:1
,我想广播到 ChatRoom Channel
.
有人被试过吗?
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
我还不能发表评论,所以我必须把它写成答案。罗兰似乎错过了 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
所以,我正在开发一个项目,该项目应该有一个与 linkedin 聊天相同的聊天组件,用户将在其中拥有他们的所有联系人和消息。
但是,我尝试了所有与 stimulus_reflex
和 view_component
合作的方法来创建这个 chat_box
,但直到现在我取得了 none 的进展。
所以现在我正在尝试与纯 action_cable 聊天,但我的疑问是:我可以将此 action_cable 频道 ('ChatRoom')
与 Stimulus Reflex
一起使用吗?因为当我们看到 rails 控制台显示如下内容时:Broadcasting to StimulusReflex::Channel:1
,我想广播到 ChatRoom Channel
.
有人被试过吗?
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
我还不能发表评论,所以我必须把它写成答案。罗兰似乎错过了 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