javascript - 如何在页面加载后订阅 channel - ActionCable、DelayedJob

标签 javascript ruby-on-rails delayed-job ruby-on-rails-5 actioncable

我有一个带有后台作业的 Controller 来启动 ActionCable 订阅:

  def result
    LinkBroadcastJob.perform_later(links)
  end

它执行此操作来流式传输链接:

  def perform(links)
      links.each do |link|
          ActionCable.server.broadcast "link_channel", html: render_link(link)
      end
  end

我在布局中有一个带有 div id="here"的 View 。

在我的文件 javascript/channes/link.coffee.js 中,它应该将所有链接附加到 div。

  App.link = App.cable.subscriptions.create { channel: "LinkChannel" },
    received: (data) ->
        $("#here").append(data.html)

此代码的问题是订阅在页面完全加载之前开始 - 因此第一个链接不会显示并且丢失。

我可以通过延迟作业和一些设定时间(5秒)来解决它,但这不是最好的体验,我不知道用户加载整个页面需要多快。我也尝试在创建订阅之前使用 $(document).load 进行操作,但没有成功。

加载 div 标签后执行订阅的最佳方式是什么?

最佳答案

您应该将客户端代码放入 turbolinks:load 中:

jQuery(document).on 'turbolinks:load', ->
   App.link = App.cable.subscriptions.create { channel: "LinkChannel" },
     received: (data) ->
         $("#here").append(data.html)

关于javascript - 如何在页面加载后订阅 channel - ActionCable、DelayedJob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38598312/

相关文章:

JavaScript 代理对象不起作用

ruby-on-rails - 何时使用 Redis

html - 如何在 Rails 中将 css 添加到 simple_form_for

sql - 延迟作业批量插入

javascript - 在 HTML 页面中显示 XML 属性

javascript - 文本输入中部分字符串的不同文本颜色

javascript - 如何使用 firebase 在 React 中创建管理状态?

ruby-on-rails - Rails3 Google Maps 使用 selenium 进行测试

ruby-on-rails-3 - 轨道 3 : Return large amount of data to user via API

Rspec 测试延迟作业