问题描述
我使用 rails 6 创建了一个聊天应用程序,我正在使用 actionable 和激励来实时广播消息和通知。到目前为止,我的设置工作得很好!
现在我也在尝试添加 a user is typing
功能,但我在实现它时遇到了问题!想法是使用 typing_channel
方法创建一个 is_typing
以广播事件,然后通过刺激控制器内部的接收方法显示输出数据。
在之前的所有实现中,我在创建消息后调用广播操作,然后通过刺激控制器内的接收方法显示数据。
但是对于 is_typing
功能,过程是不同的,因为这次我不会创建消息。
所以我的主要问题是,当我开始在表单中输入时如何触发广播事件??
class TypingChannel < ApplicationCable::Channel
def subscribed
stop_all_streams
stream_from "typing_channel"
end
def unsubscribed
stop_all_streams
end
def is_typing(data)
ActionCable.server.broadcast "typing_channel",typing: data['typing'],user: current_user
end
end
刺激控制器:
import { Controller } from "stimulus"
import consumer from "../channels/consumer"
export default class extends Controller {
static targets = ['status'];
connect() {
this.channel = consumer.subscriptions.create('TypingChannel',{
connected: this._connected.bind(this),disconnected: this._disconnected.bind(this),received: this._received.bind(this),});
}
disconnect() {
consumer.subscriptions.remove(this.subscription)
}
_connected() {
}
_disconnected() {
}
_received() {
alert("receiving data")
}
}
<div data-controller="typing" data-target="typing.status" id="user_is_typing"></div>
<%= simple_form_for @message,url: consumer_create_conversation_message_path,html: { data: { action: "ajax:success->channel#clearMessage" },method: :post,remote: true,id: :chat_form } do |f| %>
<%= f.input :body,label: false,placeholder: "Type your message here",:input_html => { id:"text_send",:rows => 2,class: "text_area_none" } %>
<%= button_tag type: 'submit',id:"button",class: "btn btn-primary btn-m fa-pull-right" do %><i class="fas fa-paper-plane"></i><% end %>
<% end %>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)