特定于页面的 ActionCable
Page-specific ActionCable
想知道将 ActionCable 与 Turbolinks 结合使用的最佳做法是什么,当您想将频道与正在查看的页面相关联时。
经典的例子,当然,如果你有一篇带评论的文章——你怎么能只流式传输那些与正在查看的文章相关的评论,然后在查看不同的文章时订阅不同的频道?
我尝试过在 JQuery 上使用 turbolinks:loaded
事件,但无法弄清楚要 link 做什么。我每次都想重新订阅吗?不重新加载 JS 怎么可能?
我通过这样做来做到这一点:
(直播任务输出)
$(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
另一种方法是
- 将您的频道 js 移动到单独的目录。
- 将您的特定频道 js 添加到 rails 资产管道。
- 编辑您的应用程序布局并添加内容占位符。
- 在您的特定页面上,为上述占位符提供内容并包含您的特定频道 js。
在我们的博客上,您会找到关于 how to enable action cable on specific pages 的更详细的 post。
想知道将 ActionCable 与 Turbolinks 结合使用的最佳做法是什么,当您想将频道与正在查看的页面相关联时。
经典的例子,当然,如果你有一篇带评论的文章——你怎么能只流式传输那些与正在查看的文章相关的评论,然后在查看不同的文章时订阅不同的频道?
我尝试过在 JQuery 上使用 turbolinks:loaded
事件,但无法弄清楚要 link 做什么。我每次都想重新订阅吗?不重新加载 JS 怎么可能?
我通过这样做来做到这一点:
(直播任务输出)
$(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
另一种方法是
- 将您的频道 js 移动到单独的目录。
- 将您的特定频道 js 添加到 rails 资产管道。
- 编辑您的应用程序布局并添加内容占位符。
- 在您的特定页面上,为上述占位符提供内容并包含您的特定频道 js。
在我们的博客上,您会找到关于 how to enable action cable on specific pages 的更详细的 post。