假设我们有一个有 2 个框架的页面,如下所示:
+---+ +-----------+
| 1 | | 2 | 1: <turbo-frame id="sidebar">
+---+ +-----------+ 2: <turbo-frame id="main">
并且页面是通过Books#index
动作呈现的。
问:我们如何main
在对应于控制器操作的 GET 请求上使用 Hotwire 仅更新涡轮帧index
?
这是我尝试的方法(简化):
# app/view/books/index.html.erb
<%= turbo_frame_tag 'sidebar' do %>
<%= render partial: 'books/sidebar' %>
<% end %>
<%= turbo_frame_tag 'main' do %>
<%= render partial: 'books/main' %>
<% end %>
# app/controllers/books_controller.rb
def index
respond_to do |format|
format.turbo_stream {
render turbo_stream: turbo_stream.replace('main', partial: 'books/main')
}
format.html
end
end
BooksController
当我单击链接对主要部分进行分页时,将向的操作发送一个 GET 请求index
,并带有一个名为 的参数page
。端点看起来像/books?page=2
.
然后,books 控制器将整个books/index.html.erb
视图作为 HTML(包括侧边栏)发回,从而更新帧 1 和 2,这不是我想要的。
我想收到<turbo-frame id='main'>
as vnd.turbo-stream
,保持侧边栏不变并更新主要部分。
如果需要,我可以提供一个确切的例子或更多细节。