2016-10-14 5 views
0

Я пытаюсь получить небольшой красный круг уведомлений для динамического обновления в приложении чата Rails с помощью Action Cable. Проблема в том, что иногда, когда отправляется сообщение, он, кажется, запускает функцию приема более одного раза. Я уверен, что у меня правильно определены подписки, но что-то не так.Уведомления о действии для нескольких подписчиков

Здесь я не забудьте создать подписки, используя параметр 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 более одного раза при запуске нового комментария?

ответ

0

Оказывается, что запрос Ajax создавал двойную часть каждого запроса, когда я посещал другие страницы. Я установил его, добавив

if (App['chat' + chat.id] == undefined){... 

до создания подписки. Таким образом, он только создает подписку, если она еще не существует.

 Смежные вопросы

  • Нет связанных вопросов^_^