Rails Turbo не запускает событие turbo:load
Событие turbo:load не запускается после турбо-посещения (как указано в документации ). Он работает, как и ожидалось, после первоначальной полной загрузки страницы. Я могу поймать событие «turbo:before-fetch-response», но мне не повезло с turbo:load, :render, :frame-render, :frame-load.
Мой запрос turbo_stream - это формат TURBO_STREAM, чтобы уничтожить вложение. Ответ контроллера
respond_to do |format|
format.turbo_stream do
render 'attachments/delete_document',
locals: { target: "docs-list-#{img.id}" }
end
end
и я возвращаю два турбо-потока, действия по обновлению и удалению которых работают по назначению:
<turbo-stream action="remove" target="<%= target %>">
<template></template>
</turbo-stream>
<turbo-stream action="update" target="flash_messages">
<template>
<%= render partial: 'layouts/flash', formats: :html,
locals: { type: :notice,
message: 'Attachment removed.' } %>
</template>
</turbo-stream>
(Примечание. Это часть другого поста . Предложенное там решение не работает в моем случае, поскольку полный атрибут существует только для HTML-элементов img .)(Я использую @hotwired/ turbo@ ^7.1.0, @ hotwired/ turbo-rails@ ^7.1.1 в Rails 7.0.1)
2 ответа
Я решил эту проблему с
turbo:render
мероприятие:
document.addEventListener('DOMContentLoaded', startFrontController)
document.addEventListener('turbo:render', startFrontController)
function startFrontController(event) {
document.removeEventListener('DOMContentLoaded', startFrontController)
new FrontController().start()
}
См. документацию по событиям Turbo: https://turbo.hotwired.dev/reference/events .
Подобно ответу Серджио, я в конечном итоге использовал одно из событий, предоставленных турбо, - в моем случае turbo:before-fetch-response, поскольку большинство других событий не срабатывали. Все еще не уверен, почему.
Однако: я обнаружил, что лучший ответ — использовать Stimulus. Предоставляет чистый интерфейс для добавления функций javascript.