ruby-on-rails @hotwired/turbo-rails /无限循环会导致浏览器崩溃

kknvjkwl  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(57)

尝试turborail;给出这个超级简单的配置:

# posts/index.html.erb
<%= turbo_stream_from("posts") %>
<%= turbo_frame_tag "posts" do %>
  <%= render posts %>
<% end %>

# posts/_post.html.erb
<%= turbo_stream_from(post) %>
<%= turbo_frame_tag dom_id(post) do %>
  <%= post.label %>
<% end %>

# app/models/post.rb
class Post < ApplicationRecord
  broadcasts
end

字符串
我们希望在添加新帖子时刷新列表。
当更新一个给定的帖子时,我们希望它在列表中刷新。
一开始一切都很顺利,我们得到了我们想要的。然后,导航,回到页面,事情开始变得超级丑陋;后端无限循环以下内容:

[ActionCable] [5e298b47-2a81-4770-9afb-07be06991d62] Ignoring message processed after the WebSocket was closed: "{\"command\":\"subscribe\",\"identifier\":\"{\\\"channel\\\":\\\"Turbo::StreamsChannel\\\",\\\"signed_stream_name\\\":\\\"IloybGtPaTh2WkcxNEwwVjBiRG82VkhKaGJuTm1aWEl2TXpnMVlqRmxOMkl0TVdWaE1pMDBZakppTFRnMk5qUXRZbVUwT1RWbVl6bGhOVGxpIg==--69b574f5584e2cfcfbf1d59d692f4cea40ce0d730d7794e3dac523cd609006a3\\\"}\"}")


在某个时候,浏览器崩溃了
这可能是我们的配置中需要修复的明显问题;至少需要寻求帮助来找出该怎么做

li9yvcax

li9yvcax1#

我仍然在验证我自己的应用程序中的修复,但我怀疑这是因为你订阅了post涡轮流每次部分被替换/重新渲染。对你来说,使用模型after_commit钩子等可能更有意义。
我已经将我的等效订阅行移到了主文件(在您的情况下是索引),并且从那以后就无法重现这个问题。
我的设置与你的设置有点不同,因为我没有使用集合进行渲染。下面是我的代码:

# index.html.erb
<%= turbo_stream_from "items_#{@item.id}" %>
<%= turbo_stream_from "progress_for_#{@item.id}" %>
<%= turbo_frame_tag "prefix_#{dom_id(@item)}" do %>
    <%= render partial: "prequalification_shared/progress_bar", locals: {progress: @progress, item: @item} %>
    <% end %>
    ...
  </div>
<% end %>

# _progress_bar.html.erb
<%# commented this out #= turbo_stream_from "progress_for_#{item.id}" %>
<%= turbo_frame_tag dom_id(item, :progress), class: "prequal-progress-bar-container" do %>
  <div>
    <div style="width: <%= progress %>%"></div>
  </div>
<% end %>

字符串

相关问题