turbo-frame src 已更新,但 html 未呈现

问题描述 投票:0回答:1

我的 Rails 布局中有一个

<turbo-frame id="modal">
标签,位于
<%= yield %>
之外,当我尝试从产量内渲染 Turbo 框架中的内容时,它不会渲染 Turbo 框架内的 HTML。
src
属性更新为
<turbo-frame id="modal" src="https://my-url">
并且页面或服务器上没有错误。

如果我将

<turbo-frame id="modal">
移动到生成的内容中,那么它将按预期渲染 Turbo 框架内的 HTML,但这是我想要在布局上使用的全局元素。

我正在使用 Turbo 8。

应用程序/视图/帖子/edit.html.erb

<%= turbo_frame_tag "modal" do %>
Render edit form ...
<% end %>

应用程序/视图/帖子/show.html.erb

<%= link_to 'edit', edit_post_path(post), data: {turbo_frame: 'modal' } %>

应用程序/视图/布局/application.html.erb

<body>
<%= turbo_frame_tag "modal" %>
<%= yield %>
<body>

这是预期的行为吗?如果不是,我做错了什么?

ruby-on-rails hotwire-rails turbo
1个回答
0
投票

我猜你已经在控制器中明确设置了布局,只需删除它:

layout "application"

您的布局中有

<turbo-frame id="modal"></turbo-frame>
,当您导航编辑链接时,您最终会渲染两个具有相同 id 的 Turbo 帧。仅使用第一个 Turbo 帧来更新页面。它是空的,所以你不会得到任何更新:

<body>
  <turbo-frame id="modal"></turbo-frame>

  <turbo-frame id="modal">
    Render edit form ...
  </turbo-frame>
</body>

当您设置布局时,您将覆盖涡轮帧布局,通常会针对涡轮帧请求进行渲染。这是一个空的布局,用于性能。这意味着您只需渲染一个 Turbo 帧,一切都会正常工作。

如果您需要覆盖布局,请执行以下操作:

layout -> {
  if turbo_frame_request?
    "turbo_rails/frame"
  else
    "other_layout"
  end
}
© www.soinside.com 2019 - 2024. All rights reserved.