Когда в приложении Hotwire/Rails использовать tartget: '_top' для turbo_frame?
В руководстве по турбонаддуву объясняется здесь и здесь .
Но я до сих пор не понимаю, в чем разница между этими двумя формами:
#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 %>
Обе формы отправят обычный запрос в формате HTML с помощью метода GET, и вся страница будет заменена на Turbo Drive. Так что в этом случае их поведение выглядит очень похоже.
Является
target: '_top'
полезно только тогда, когда мне нужно лениво загрузить что-то через
src
атрибут Turbo Frame, в то время как я хочу, чтобы контент перемещался за пределы кадра? :
<%= turbo_frame_tag 'something', src: '/something', target: '_top' %>
1 ответ
Вы правы в том, что форма за пределами любого фрейма обертывания (например, ваш пример №2) совпадает с формой в теге фрейма, который имеет
target="_top"
Но рассмотрим свой первый пример без атрибута _top:
<%= turbo_frame_tag 'new_search' do %>
<%= search_form_for :q do |f| %>
...
<% end %>
<% end %
Теперь это не то же самое, что и в примере №2, результат формы поиска будет работать только в пределах кадра new_search. Это цель атрибута _top, чтобы разбить форму или ссылку за пределы рамки обертывания.