首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Turbo broadcast_replace_to正在删除turbo_frame_tag

Turbo broadcast_replace_to正在删除turbo_frame_tag
EN

Stack Overflow用户
提问于 2022-07-26 21:48:36
回答 1查看 645关注 0票数 0

代码片段:

application.html.erb

代码语言:javascript
复制
<%= turbo_stream_from current_user, "counter" %>

<% if current_user%>
        <%= render partial: "users/counter", locals: { user: current_user } %>
<% end %>

users/_counter.html.erb

代码语言:javascript
复制
<%= turbo_frame_tag "#{dom_id user}_counter" do %>
  <span class="text-subtitle">counter:<%= user.counter %></span>
<% end %>

user.rb

代码语言:javascript
复制
include ActionView::RecordIdentifier

after_update_commit -> { broadcast_replace_to [self, "counter"],
                                                partial: "users/counter",
                                                locals: { user: self },
                                                target: "#{dom_id(self)}_counter"
  }

第一次加载或刷新页面时,它将显示正确的计数器值。相关HTML:

代码语言:javascript
复制
<turbo-frame id="user_1_counter">
  <span class="text-subtitle">counter:19</span>
</turbo-frame>

通过控制台更新计数器:

代码语言:javascript
复制
irb(main):030:0> user.counter = 20
=> 20
 user.save!
  TRANSACTION (0.0ms)  begin transaction
  USELECT 1 AS one FROM "users" WHERE "users"."username" = ? AND "users"."id" != ? LIMIT ?  [["username", "test 4"], ["id", 1], ["LIMIT", 1]]
  User Update (0.6ms)  UPDATE "users" SET "updated_at" = ?, "counter" = ? WHERE "users"."id" = ?  [["updated_at", "2022-07-26 21:38:47.033843"], ["counter", 20], ["id", 1]]
  TRANSACTION (0.4ms)  commit transaction
  Rendered users/_counter.html.erb (Duration: 0.0ms | Allocations: 8)
[ActionCable] Broadcasting to Z2lkOi8vY2x1Y2tjbHVjay9Vc2VyLzE:counter: "<turbo-stream action=\"replace\" target=\"user_1_counter\"><template><span class=\"text-subtitle\">counter:20</span></template></turbo-stream>"
=> true

在播放此更改后,屏幕上的HTML将显示新的计数器值,但turbo-frame标记已消失:

代码语言:javascript
复制
<span class="text-subtitle">counter:20</span>

如果我在控制台中再次更改计数器,即使广播被发送,网页上也不会有任何变化。这是有意义的,因为没有匹配目标ID的元素。

我的问题是,为什么在第一次更新之后没有呈现<turbo-frame>

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 23:51:11

使用常规HTML元素上的目标ID而不使用turbo-frame标记似乎解决了这个问题。

_counter.html.erb

代码语言:javascript
复制
<span class="text-subtitle" id="<%= "#{dom_id user}_counter" %>"><%= user.counter %></span>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73130098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档