Как очистить форму после отправки в рельсах, используя (стимул) hotwire?

У меня есть форма, которая создает новый пост, и контроллер стимулов, который очищает поля ввода после отправки. Однако он делает это до того, как входные значения достигают моего контроллера rails.

Это мое form_controller.js

      import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  clear() {
    this.element.reset()
  }
}

моя форма:

      <turbo-frame id='<%= id %>'>
  <%= form_with model: post, data: { controller: :form } do |f| %>
    Title: <%= f.text_field :title %>
    Body: <%= f.text_area :body %>
    <%= f.submit data: {action: 'form#clear'} %>
<% end %>
</turbo-frame>

Все работает отлично, за исключением того, что создается пустой пост (у меня нет проверок), потому что мои поля ввода очищаются Js до того, как они достигают моего контроллера Rails.

Я огляделся и нашел этот пост, но не знаю, что делать.Как очистить текстовую область после запроса формы «ajax» с помощью ruby ​​on rails

1 ответ

Событие выполняется при нажатии кнопки отправки, вместо этого попробуйте запустить его при отправке формы. Не тестировал код, но вы можете сделать что-то вроде этого:

Попробуйте 1:

      import { Controller } from "@hotwired/stimulus"

export default class extends Controller {

  connect() {
    this.element.addEventListener("submit", clear);
  }

  clear() {
    this.element.reset()
  }
}

И удалите действие с кнопки отправки:

      <%= f.submit %>

Или вы можете попробовать это (запуск действия при турбо-отправке):

Попробуйте 2:

      <turbo-frame id='<%= id %>'>
  <%= form_with model: post, data: { controller: :form, action: "turbo:submit-end->form#clear" } do |f| %>
    Title: <%= f.text_field :title %>
    Body: <%= f.text_area :body %>
    <%= f.submit %>
  <% end %>
</turbo-frame>
Другие вопросы по тегам