Проблема перезагрузки Turbolink (JS) в приложении Rails

Я работаю над приложением Rails 5.2 с установленной по умолчанию Turbolink. Я понимаю, что Turbolink не перезагружает все ресурсы при навигации по сайту, поэтому некоторые JS-компоненты сайта перестают работать, пока я не перезагружу страницу вручную. В моем примере раскрывающийся список навигации и кнопка "Сохранить" на странице редактирования сообщения не работают. Я попытался полностью удалить Turbolink из проекта, и это, похоже, решило проблему, но я знаю, что мне нужен Turbolink из соображений производительности на производстве. Насколько я понимаю, это причина, по которой turbolink по умолчанию поставляется с Rails после версии 4. Решение, которое я нашел в Интернете, заключается в добавлении этого кода ниже в мой код JS: document.addEventListener("turbolinks:load", function() { my_func(); })

Проблема с этим решением заключается в том, что я не знаю точно, как обернуть мой код этой строкой. Я работаю с темой Bootstrap, которая имеет 4 файла JS. Самый маленький из этих файлов имеет 200 строк и имеет различные функции. Как исправить проблему с Turbolink при использовании тем Bootstrap? Вы оборачиваете решение вокруг всего файла javascript?

1 ответ

Вам нужны Turbolinks для производительности?

Как правило, хорошее веб-кэширование (304 для ресурсов), отсрочка и асинхронность для сценариев и т. Д. Приведут к тому, что браузер будет вести себя почти так же, как с включенными Turbolinks.

Но в целом, если ваша тема и / или начальный загрузчик (я не использовал ее) не имеет единственной функции инициализации, но каждый отдельный элемент инициализирует сам себя, то, вероятно, вас ожидает грубая поездка.

Я бы посмотрел предварительно подтвержденную версию темы (или документацию), чтобы увидеть, есть ли общая функция инициализации, которую вы можете вызвать.

Надеюсь это поможет.

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