0
我正在嘗試使用Action Cable在我的Rails聊天應用程序中動態更新一個小紅色通知圈。問題是,有時在發送消息時,它似乎不止一次地觸發接收功能。我很確定我已經正確定義了訂閱,但出現了問題。多個訂閱的動作電纜通知
這裏我確保使用chat_id參數創建訂閱。相同的參數在submitNewMessage函數中使用
資產/ JavaScript的/信道/ chat.js
$(document).on('turbolinks:load', function() {
submitNewMessage();
$.ajax({
type: "GET",
dataType: "json",
url: "/chats",
success: function(data){
$.each(data, function(i, chat){
App['chat' + chat.id] = App.cable.subscriptions.create({
channel: "ChatChannel",
chat_id: chat.id},
{ received: function(data){
# Code to update notifications
}}
});
}
}
});
function submitNewMessage(){
$('#message_text').keydown(function(event) {
if (event.keyCode == 13) {
var text = event.target.value
App['chat' + chat_id].send({text: text})
$('#message_text').val(" ")
return false;
}
});
}
});
而在訂閱方法我還使用chat_id PARAMS
通道/ chat_channel.rb
class ChatChannel < ApplicationCable::Channel
def subscribed
stream_from "chat_#{param['chat_id']}_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def receive(payload)
Message.create(user_id: current_user.id, chat_id: params["chat_id"], text: payload["text"])
end
end
在觸發新評論時,chat.js中的接收函數如何被觸發多次?