javascript - Rails 6 Actioncable 用户正在输入
问题描述
我已经使用 rails 6 创建了一个聊天应用程序,并且我正在使用可操作性和刺激性来实时广播消息和通知。到目前为止我的设置工作得很好!
现在我也在尝试添加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 %>
解决方案
推荐阅读
- visual-studio-code - Vscode - 如何将#region 颜色添加到 Minimap
- python - 使用循环并在数据框中添加 value_counts
- asp.net-core - Owin 是 Asp.Net Core 的旧技术吗?
- complex-event-processing - Cumulocity CEL 检查事件是否存在
- google-cloud-platform - 谷歌云构建 - 自定义机器类型
- django - 将遗留数据库集成到新的 Django 应用程序
- css - 如何使用 flexbox 将我的项目每行对齐两个项目?
- swift - xib 转换为以编程方式查看
- amazon-web-services - what format is used for aws logs stored in s3
- python - nginx:如何从 url 中删除端口?