【发布时间】:2016-07-26 19:25:41
【问题描述】:
我有一个带有后台作业的控制器来启动 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" 的视图。
在我的文件 javascript/channes/link.coffee.js 中,它应该将所有链接附加到 div。
App.link = App.cable.subscriptions.create { channel: "LinkChannel" },
received: (data) ->
$("#here").append(data.html)
此代码的问题是订阅在页面完全加载之前开始 - 因此第一个链接没有显示并且丢失。
我可以通过一些设定时间(5 秒)的延迟作业来解决它,但这不是最好的体验,而且我不知道用户加载整个页面需要多快。在创建订阅之前,我也尝试使用 $(document).load 但它不起作用。
加载 div 标签后执行订阅的最佳方式是什么?
【问题讨论】:
标签: javascript ruby-on-rails delayed-job ruby-on-rails-5 actioncable