ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Решение: $(document).ready() в Rails 4 при включенных turbo-links

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для корректной инициализации событий JavaScript при применении TurboLinks в Rails 4, воспользуйтесь событием turbolinks:load следующим образом:

JS
Скопировать код
$(document).on('turbolinks:load', function() {
  // Здесь производится инициализация скриптов...
});
Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

При использовании TurboLinks и jQuery необходимо уделять особое внимание привязке событий, идемпотентности выполнения кода и правильной организации файлов.

Традиционное событие $(document).ready может не срабатывать из-за TurboLinks. Вместо него используйте событие page:load в комбинации с jQuery для Rails 4. Интересно отметить, что название TurboLinks обусловлено его способностью буквально "связывать" страницу с пользователем мгновенно.

JS
Скопировать код
$(document).on('page:load', function() {
  // Ваш jQuery работает с максимальной скоростью!
});

Предотвращение повторного присоединения событий

Стремитесь избегать многократной привязки одних и тех же событий при переходе между страницами для оптимизации производительности.

JS
Скопировать код
if (!eventAlreadyBound) {
  // Здесь производится привязка события единожды.
}

Обратите внимание на библиотеку jquery.turbolinks, хотя она и устарела, но по-прежнему может быть полезной при решении конфликтов между TurboLinks и jQuery.

JS
Скопировать код
//= require jquery.turbolinks
// Этот gem поможет решить проблемы совместимости.

Перепишите свои скрипты таким образом, чтобы они корректно работали с TurboLinks, не зависимо от события 'ready'.

JS
Скопировать код
$(document).on('turbolinks:load', function() {
  // Здесь начинается новая эра работы с TurboLinks!
});

Комплексная обработка событий

Сочетание событий $(document).on('ready page:load') позволяет универсально решать вопросы обработки первоначальной загрузки страницы и её обновлений при использовании TurboLinks.

JS
Скопировать код
$(document).on('ready page:load', function() {
  // Готовы к работе в любых обстоятельствах!
});

Организация файлов в asset pipeline

Рекомендуется чётко структурировать загрузку ваших JavaScript-файлов через главный манифест application.js.

JS
Скопировать код
//= require_tree .
// Этот комментарий символизирует бесшумную работу файлов JavaScript, ведь они сами не могут "говорить".

RDetailed understanding работы с TurboLinks в различных версиях Rails, эффективном взаимодействии с событиями и помощниками Rails, может значительно улучшить опыт пользователя.

При использовании Rails 4.2 и более новых версий рекомендуется использовать событие turbolinks:load для непрерывной работы событий jQuery.

JS
Скопировать код
$(document).on('turbolinks:load', function() {
  // Совместная работа jQuery и TurboLinks принесет только пользу.
});

Эффективность скриптов

Ниже описан способ написания скриптов, которые идеально сочетаются с экосистемой TurboLinks.

JS
Скопировать код
$(document).on('turbolinks:load', function() {
  // Ваши скрипты обретут надёжность и эффективность!
});

Практические советы

Следуйте стилистическим канонам JavaScript в соответствии с руководствами Rails или используйте дополнительные образовательные ресурсы.

JS
Скопировать код
$(document).on('turbolinks:load', function() {
  // Когда мы в мире Rails, ведём себя соответствующе.
});

Визуализация

Представьте, что благодаря TurboLinks страница готова мгновенно и не требует явного уведомления через $(document).ready():

Markdown
Скопировать код
"🚂 Все на борт! Поезд DOM готов отправиться со станции Document!"

При использовании события turbolinks:load мы имеем следующую ситуацию:

JS
Скопировать код
document.addEventListener("turbolinks:load", function() {
  // 🚀 Мы достигли конечной станции – запускаем скрипты НЕМЕДЛЕННО!
});

Полезные материалы

  1. Работа с JavaScript в Rails — Руководства Ruby on Rails
  2. Turbo: Скорость одностраничного приложения без необходимости писать JavaScript.
  3. GitHub – turbolinks/turbolinks: Turbolinks делает навигацию по вашему веб-приложению быстрее.
  4. javascript – Rails 4: как использовать $(document).ready() с TurboLinks – Stack Overflow
  5. #390 Turbolinks – RailsCasts
  6. thoughtbot
  7. GitHub – kossnocorp/jquery.turbolinks: 💀 Устаревший ⚠️ Плагин jQuery для исправления привязанных событий, вызванных Turbolinks.