Турбо: как переоценить некоторые js-файлы после рендеринга?

Я все еще новичок в Hotwire. У меня есть эта проблема, которая, я думаю, является общей проблемой для Turbo. Я помню, что раньше он был у меня в Turbo-Links, потому что в итоге я всегда деактивировал его в своих проектах.

Проблема, похоже, в том, что файлы .js не оцениваются повторно после загрузки фрейма.

Эти JS имеют некоторую логику после рендеринга, например «подсказки» Bootstrap, которые требуют, чтобы селектор запроса прошел через все соответствующие элементы и активировал функциональность.

Я безуспешно искал в Google:

  • Rails Turbo: переоценка JS
  • рельсы javascript_include_tag и турбо-перезагрузка

Как я могу попросить Turbo переоценить некоторые из моих js-файлов, импортированных с помощью javascript_include_tag, как здесь?:

<%= javascript_include_tag "phoenix/vendors/dayjs/dayjs.min.js" %>
<%= javascript_include_tag "phoenix/assets/js/phoenix.js" %>

Я ожидал чего-то вроде:

<%= javascript_include_tag "phoenix/assets/js/phoenix.js", turbo_reload: true %>

Некоторое время назад я ответил на аналогичный вопрос: stackoverflow.com/questions/73359149/… Но если вы не используете Stimulus, вы можете добавить несколько наблюдателей мутаций в свой JS. Хотя Turbo хорошо работает со Stimulus.

Maxence 03.08.2024 19:48

Причина, по которой вы ничего не находите, заключается в том, что неимпотентные и неделегированные обработчики событий являются известной проблемой не только с Turbo, но и с каждой существующей средой JavaScript, которая динамически вставляет содержимое в DOM. В конечном итоге они либо ничего не делают, либо снова и снова подключают один и тот же обработчик событий. Мой совет — просто выбирайте библиотеки, которые не такие дерьмовые.

max 03.08.2024 20:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, вы ищете прослушиватель турбо:кадровой загрузки.

Вот пример:

document.documentElement.addEventListener('turbo:frame-load', function (e) {
  // Initialize bootstrap tooltips and other logic here
});

Источник: https://turbo.hotwired.dev/reference/events

Другие вопросы по теме