我在我的application.html.haml文件中有一段代码,根据一些用户属性决定是否订阅给定的频道。
问题在于,当我点击链接跳转到另一个页面时,由于这段代码在主体中,它会再次订阅用户,而不是保留旧连接,因此我的receive()方法会被执行多次。
以下是我在application.html.haml中的代码:
第一次加载页面时,当我向该频道广播消息时,控制台只会记录“Data Received”一次。 我单击链接以重定向到另一页,我向该频道广播新消息,现在控制台将记录“Data Received”两次。以此类推...
实际上,当我在Chrome控制台上运行时:
问题在于,当我点击链接跳转到另一个页面时,由于这段代码在主体中,它会再次订阅用户,而不是保留旧连接,因此我的receive()方法会被执行多次。
以下是我在application.html.haml中的代码:
%html
%head
-# other stuff
= javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
%body
-# other stuff
- if current_user.is_admin?
:coffee
MyApp.AdminNotifications.init()
assets/javascripts/notifications/admin_notifications.js.coffee
window.MyApp.AdminNotifications = class AdminNotifications
@init: ->
App.cable.subscriptions.create "ProductsChannel",
received: (data) ->
console.log 'Data Received' # This is being executed multiple times
第一次加载页面时,当我向该频道广播消息时,控制台只会记录“Data Received”一次。 我单击链接以重定向到另一页,我向该频道广播新消息,现在控制台将记录“Data Received”两次。以此类推...
实际上,当我在Chrome控制台上运行时:
App.cable.subscriptions.subscriptions
它会为同一频道返回多个订阅(每次我点击链接并重定向到不同页面时都会返回一次)。
注意:我没有在此帖子中添加更多的Action Cable设置,因为它已经正常工作。
我该如何避免这种情况?有什么想法吗?