Отключение туроболинков для обслуживания javascript для конкретной страницы

У вас есть высокоинтерактивная управляемая событиями страница в rails 5.0.0.1 с Turbolinks. При различном взаимодействии на разных страницах такие события, как window.resize, будут запускаться на тех страницах, где мне это действительно не нужно.

Стоит ли жертвовать временем навигации, отключив Turbolinks для обслуживания javascript для конкретной страницы, или мне все равно, и просто использовать оператор if в JQuery, чтобы проверить, присутствуют ли определенные элементы на странице, используя их идентификатор.

Как это можно сделать с помощью рельсов?


person AntoineLev    schedule 06.09.2016    source источник


Ответы (1)


Не рекомендуется использовать ресурсы для конкретных страниц, такие как javascript. Это замедляет взаимодействие с пользователем, поскольку переход на новую страницу вызывает загрузку другого ресурса.

Вся суть Rails Asset Pipeline состоит в том, чтобы собрать ваши активы, минимизировать их и объединить в один файл, который браузер загружает только один раз, когда пользователь впервые переходит на вашу страницу.

Да, используйте jQuery, чтобы проверить, существуют ли определенные элементы для выполнения определенного поведения.

Я считаю полезным не думать о поведении js как о конкретной странице, а как о конкретном виджете. например если в DOM есть сортируемая таблица, инициализируйте виджет сортируемой таблицы, т.е. $(".sortable").sortable()

В приведенном выше примере используется шаблон подключаемых модулей jQuery. Поместите свою логику поведения / виджета в плагин jQuery, и он будет работать только тогда, когда селектор найдет элементы, например. $("#nonexistant").something(), something() не будут называться. $("#definitelyExists").somethingElse(), somethingElse() будет называться.

В предыдущих примерах, когда элемент найден и вызывается функция, this функции ссылается на совпадающие элементы, и вы можете запустить на них свою логику поведения.

person DiegoSalazar    schedule 06.09.2016