Rails 7 + Turbo Frames页面刷新后内容还原问题咨询
解决Turbo Frames刷新后内容还原的问题
你不需要改用Turbo Streams,问题核心在于Turbo Frames默认仅做前端DOM替换,不会更新浏览器URL或让服务器记住当前内容状态,刷新时服务器会根据当前URL返回初始页面内容,导致框架内容还原。可以通过以下两步解决:
1. 让导航链接更新浏览器URL
修改链接,添加data-turbo-action="advance"属性,点击链接时既替换Turbo Frame内容,也更新浏览器历史记录和URL:
// First Page = turbo_frame_tag "main" do %p Testing Turbo Out link_to "Test it", other_page_path, data: { turbo_frame: "main", turbo_action: "advance" }
2. 服务器端根据URL渲染对应内容
把main框架的内容抽成可复用的部分模板,让不同页面的控制器动作指定要渲染的内容,确保刷新时服务器能返回正确的框架内容:
- 创建首页内容的部分模板
app/views/shared/_home_content.html.erb:%p Testing Turbo Out - 创建其他页面内容的部分模板
app/views/shared/_other_content.html.erb:%p is this thing on? - 在首页控制器动作中指定渲染的部分:
def index @content_partial = "home_content" end - 在
other_page控制器动作中指定渲染的部分:def other_page @content_partial = "other_content" end - 统一在页面中渲染
main框架:= turbo_frame_tag "main" do render "shared/#{@content_partial}"
配置完成后,点击导航链接会更新URL,刷新页面时服务器会根据当前URL对应的动作渲染正确内容到main框架,不会再出现内容还原的问题。
内容的提问来源于stack exchange,提问作者Patrick Vellia
相关产品推荐
相关产品推荐

