Я недавно интегрировал Webpacker
в свое приложение, и кажется, что предопределенный способ больше не использует action.js.erb
для обработки отправленной формы AJAX.Мое приложение - чисто рендеринг на стороне сервера, без js-фреймворка, отличного от StimulusJS
.Нет рендеринга на стороне клиента
Почему я думаю, что я не должен больше использовать action.js.erb
?Поскольку эти файлы находятся в папке views
, это не управляется Webpacker.Поэтому я думаю, что это не так.Поскольку я не нашел никакой официальной документации, это всего лишь предположение.
Если это предположение реально, это означает, что я должен использовать Rails-ujs
обработчики событий как в руководстве дляобрабатывать ответ на стороне клиента.Для этой цели я бы хотел, чтобы серверная часть отправляла фрагменты HTML, которые были бы введены в DOM каким-либо обработчиком.Но есть пункт, который я не понимаю.Давайте рассмотрим пример:
Моя форма:
<%= form_with url: missions_path, method: :get do |f| %>
<!-- Some stuff
<% end %>
Мой javascript (обработчик Rails-UJS)
let filterMissionsForm = document.querySelector("#missions-filter-form");
filterMissionsForm.addEventListener("ajax:success", (e) => {
let data = event.detail[0];
let missionsTableElement = document.querySelector("#missions-table-wrapper")
missionsTableElement.innerHTML = data;
})
Мой контроллер:
class MissionsController < ApplicationController
def index
@missions = Mission.all
respond_to do |format|
# Option 1
format.html {render 'missions'}
# Option 2
format.js
end
end
end
У меня есть два варианта, которые мне приходят в голову, но оба они не будут работать.
Вариант 1. Выполнит полное обновление страницы, как если бы partial:
был проигнорирован.
Вариант 2: генерирует ошибку в консоли браузера, поскольку сервер отвечает HTML-документом в файле, который должен содержать javascript.
Как правильно делать то, что я хочу?
Вкратце: как заставить серверную часть генерировать в AJAX фрагменты HTML, которые могут обрабатываться обработчиками Rails-UJS?