我的 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>
这是预期的行为吗?如果不是,我做错了什么?
我猜你已经在控制器中明确设置了布局,只需删除它:
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
}