Rails 6 Actioncable 用户正在输入

问题描述

我使用 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...