在 Ruby on Rails 中使用 ActionCable 更新多个 div 的最佳做法是什么?
What are the best practices of updating multiple divs with ActionCable in Ruby on Rails?
我在 Rails 网站上有一个 Ruby。其中一个索引页有一个包含多行的 table。我还有一个后台作业,对每一行执行某些操作,每行大约需要 5-10 秒。
当后台作业中的处理完成后,我想将每一行的状态从 'Processing...' 更新为 'Done'。
我想使用 Action Cable 来进行更新,但到目前为止我只使用 Action Cable 来更新页面上的一个元素,而不是多个元素。
我想知道设置我的代码以更新每一行中的状态的正确方法是什么。是否必须为每一行单独打开一个频道?
当然可以。而且您不必为每一行打开频道。只需使用状态已更改的作业 ID 和 table 中具有相同 ID 的对应行。
ActionCable.server.broadcast "job_status_update", job_id: 'xxxxx', status: 'complete'
.html
<table>
<% jobs.each do |job|%>
<tr>
<td id="<%= job_id %>">
<%= job.status %>
</td>
</tr>
<% end %>
</table>
.咖啡
App.chatChannel = App.cable.subscriptions.create { channel: "JobChannel" },
received: (data) ->
$(data.job_id).innerText(data.status)
我在 Rails 网站上有一个 Ruby。其中一个索引页有一个包含多行的 table。我还有一个后台作业,对每一行执行某些操作,每行大约需要 5-10 秒。
当后台作业中的处理完成后,我想将每一行的状态从 'Processing...' 更新为 'Done'。
我想使用 Action Cable 来进行更新,但到目前为止我只使用 Action Cable 来更新页面上的一个元素,而不是多个元素。
我想知道设置我的代码以更新每一行中的状态的正确方法是什么。是否必须为每一行单独打开一个频道?
当然可以。而且您不必为每一行打开频道。只需使用状态已更改的作业 ID 和 table 中具有相同 ID 的对应行。
ActionCable.server.broadcast "job_status_update", job_id: 'xxxxx', status: 'complete'
.html
<table>
<% jobs.each do |job|%>
<tr>
<td id="<%= job_id %>">
<%= job.status %>
</td>
</tr>
<% end %>
</table>
.咖啡
App.chatChannel = App.cable.subscriptions.create { channel: "JobChannel" },
received: (data) ->
$(data.job_id).innerText(data.status)