在那个 show
操作或者 render locals: {..
中,你需要一些实例变量,否则你将返回空值。在 stimulus 控制器中,this
指的是控制器实例,在没有看到其余部分的情况下,它看起来好像什么也没做。
将此复制到任何页面并单击以重新加载:
<%= turbo_frame_tag :reloadable, style: "display:none;" do %>
<%= request.uuid %>
<% end %>
<%= turbo_frame_tag :reloadable, src: request.url, onclick: "reload()" %>
重复的ID,我知道。把它放在不同的页面上,就不会再重复了。
因为 onclick
不是一个很酷的事情:
import { Controller } from "@hotwired/stimulus";
export default class extends Controller {
reload() {
this.element.reload();
}
}
<%= turbo_frame_tag(:reloadable, style: "display:none;") { request.uuid } %>
<%= turbo_frame_tag :reloadable, src: request.url,
data: {
controller: "hello",
action: "click->hello#reload"
}
%>
https://turbo.hotwired.dev/reference/frames#functions
关于搜索表单:
<%= form_with url: "/users", method: :get,
data: {turbo_frame: :users} do |f| %>
<%= f.search_field :name, placeholder: "search by name" %>
<%= f.button "Search" %>
<% end %>
<%= turbo_frame_tag :users, src: "/users", target: :_top %>
<%
scope = User.all
scope = scope.where(name: params[:name]) if params[:name].present?
@users = scope
%>
<%= turbo_frame_tag :users, target: :_top do %>
<% @users.each do |user| %>
<%= user.name %>
<% end %>
<% end %>
https://turbo.hotwired.dev/handbook/frames#targeting-navigation-into-or-out-of-a-frame