https://web-crunch.com/posts/turbo-charged-real-time-search-ruby-on-rails-7
我按照这个教程包括涡轮到我们的应用程序。然而,我们宁愿不安装刺激宝石,因为它似乎增加了很多KB的资产管道。有没有一种方法可以用普通的JavaScript实现相同的行为?即,在“输入”事件上仅重新加载Turbo帧。
教程中的相关代码:
更新Turbo Frame的表单:
<%= form_with(url: bands_path, method: :get, data: {turbo_frame: "bands"}) do |form| %>
<%= form.label :query, "Search by band name:", class: "block mb-2" %>
<div class="flex space-x-3">
<%= form.text_field :query, class: "py-3 px-4 rounded border ring-0 focus:ring-4 focus:ring-orange-100 focus:shadow-none focus:border-orange-500 focus:outline-none" %>
<%= form.submit 'Search', class: "px-4 py-3 font-medium
bg-orange-300 text-neutal-900 rounded flex items-center cursor-pointer hover:bg-orange-400 focus:ring-4 ring-0 focus:ring-orange-100" %>
</div>
<% end %>
Turbo帧部分:
<!-- app/views/bands/_bands.html.erb-->
<%= turbo_frame_tag "bands" do %>
<%= render bands %>
<% end >
刺激控制器:
// application/javascript/controllers/search_form_controller.js
import { Controller } from "@hotwired/stimulus"
// Connects to data-controller="search-form"
export default class extends Controller {
search() {
clearTimeout(this.timeout)
this.timeout = setTimeout(() => {
this.element.requestSubmit()
}, 200)
}
}
我们尝试将turbo-frame的src参数设置为new search on input,但这似乎不会生成新的turbo_frame_request:
<%= form.text_field :query, oninput: "bands.src=`${location.href}?query=${this.value}`" %>
1条答案
按热度按时间m4pnthwp1#
只需执行与刺激控制器相同的操作-提交表单:
此外,Stimulus是12 kb压缩的,您可以从CDN获得它,避免它不会节省任何空间:https://www.jsdelivr.com/package/npm/stimulus。