Отключение турболинков для обслуживания специфичного для страницы javascript
Если у вас есть высокоинтерактивная управляемая событиями страница в rails 5.0.0.1 с Turbolinks. При разных взаимодействиях на разных страницах такие события, как window.resize, будут запускаться на тех страницах, где мне это не нужно.
Стоит ли жертвовать временем навигации, отключив Turbolinks для обслуживания специфичного для страницы javascript, или мне все равно, и просто используйте оператор if в Jquery, чтобы проверить, присутствуют ли определенные элементы на странице с использованием их идентификатора.
Как это сделать?
1 ответ
Не рекомендуется обслуживать определенные ресурсы страницы, такие как javascript. Это замедляет работу пользователя, поскольку переход на новую страницу запускает загрузку другого ресурса.
Весь смысл Rails Asset Pipeline состоит в том, чтобы собрать ваши активы, минимизировать их и объединить все в один файл, который браузер загружает только один раз, при первом переходе пользователя на вашу страницу.
Да, используйте jQuery, чтобы проверить, существуют ли определенные элементы для выполнения определенного поведения.
Я нашел полезным не думать о поведении js как о конкретной странице, а как о виджете. Например, если в DOM есть сортируемая таблица, инициализируйте виджет сортируемой таблицы, т.е. $(".sortable").sortable()
В приведенном выше примере используется шаблон плагинов jQuery. Поместите свою логику поведения / виджета в плагин jQuery, и он будет работать только тогда, когда селектор найдет элементы, например $("#nonexistant").something()
, something()
не будет называться. $("#definitelyExists").somethingElse()
, somethingElse()
будет называться.
В предыдущих примерах, когда элемент найден и функция вызвана, this
функции ссылается на соответствующие элементы, и вы можете запустить свою логику поведения на них.