特定于页面的ActionCable

时间:2016-04-05 22:39:34

标签: ruby-on-rails turbolinks actioncable

当您想要将频道与正在查看的页面联系起来时,好奇将ActionCable与Turbolinks一起使用的最佳做法。

这是一个经典的例子,当然,如果您有一篇包含评论的文章 - 如何仅在视图中传输与该文章相关的评论,然后在查看其他文章时订阅其他频道?

我已经玩过在JQuery上使用turbolinks:loaded事件,但是无法弄清楚要将它链接到什么。我想每次都重新订阅吗?如果不重新加载JS,怎么可能呢?

2 个答案:

答案 0 :(得分:3)

我通过做这样的事情来管理:

(直播任务输出)

$(document).on 'turbolinks:load', -> # use page:change if your on turbolinks < 5
  if document.getElementById("task-output") # if a specific field is found 
    App.task = App.cable.subscriptions.create { channel: "TaskChannel", task_id: task_id },
      received: (data) ->
        # do something with your data
  else if App.task # if I'm not on the page where I want to be connected, unsubscribe and set it to null
    App.task.unsubscribe()
    App.task = null

答案 1 :(得分:0)

另一种方法是

  1. 将您的频道js移至单独的目录。
  2. 将您的特定频道js添加到rails资产管道。
  3. 修改应用程序布局并添加内容占位符。
  4. 在您的特定页面上,为上述占位符提供内容并包含您的特定频道js。
  5. 在我们的博客上,您会在how to enable action cable on specific pages上找到更详细的帖子。