在Hotwire/Rails应用程序中,什么时候使用target: '_top'来处理turbo_frame?

4
这本Turbo手册在这里解释了target: '_top'这里
但是我仍然不明白这两种形式之间的区别:

#1

<%= turbo_frame_tag 'new_search', target: '_top' do %>    
  <%= search_form_for :q do |f| %>
    ...
  <% end %>
<% end %>

#2

<%= search_form_for :q do |f| %>
  ...
<% end %>

两个表单都将通过GET方法发送普通的HTML格式请求,并且整个页面都将被Turbo Drive替换。因此,在这种情况下,它们的行为看起来非常相似。

当我需要通过Turbo Frame的src属性懒加载某些内容,同时希望内容导航到框架外部时,target: '_top'是否只有在这种情况下才有用?

<%= turbo_frame_tag 'something', src: '/something', target: '_top' %>
1个回答

1

你说得对,一个没有任何包装框架的表单(例如你的#2示例)与一个带有target="_top"的框架标签内的表单是相同的。

但是考虑一下你的第一个示例没有_top属性:

<%= turbo_frame_tag 'new_search' do %>    
     <%= search_form_for :q do |f| %>
     ...
     <% end %>
<% end %

这与示例#2现在不同,搜索表单的结果仅在new_search框架内运行。这就是_top属性的作用,它可以将表单或链接打破其包装框架之外。


2
谢谢!但是我什么时候需要将表单从其框架中分离出来呢? 我的意思是,我可以在我的代码中删除框架。 如果我想要在框架中创建特定的链接以导航到外部页面,我可以在链接上使用 data-turbo-frame="_top"。因此,我不认为有必要向框架添加 target="_top" - hungmi
2
你可能是正确的,只有在使用src进行延迟加载时才有意义。Hotwire仍然非常新,并且文档可能不足,我建议在他们的社区页面https://discuss.hotwire.dev/上提问。 - Joel Blum
换句话说,“_top”是指整个页面的目标吗? - buncis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接