ruby 在没有刺激的情况下使用Turbo帧?

ie3xauqp  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(79)

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}`" %>
m4pnthwp

m4pnthwp1#

只需执行与刺激控制器相同的操作-提交表单:

<%= form_with url: request.path, method: :get, data: {turbo_frame: :bands} do |form| %>
  <%= form.text_field :q, oninput: "search(event)" %>
<% end %>

<%= turbo_frame_tag :bands, data: {turbo_action:  :advance} do %>
  <%= params[:q] %>
<% end %>

<script charset="utf-8">
  function search(event) {
    event.target.closest("form").requestSubmit()
  }
</script>

此外,Stimulus是12 kb压缩的,您可以从CDN获得它,避免它不会节省任何空间:https://www.jsdelivr.com/package/npm/stimulus

相关问题