Как загрузить зависимости javascript с помощью турболинков

В приложении Rails я использую turbolinks и jquery-turbolinks. У меня есть несколько больших зависимостей JavaScript, таких как dataTables. Во-первых, я загружал все эти зависимости в application.js, но, в конце концов, у меня есть большой файл на 1Mo после прекомпиляции, поэтому я хочу загружать зависимости только тогда, когда они требуются.

Я создал файл с именем custom-datables.coffe с этим содержанием:

#= require dataTables/jquery.dataTables
#= require datatables

$(document).ready ->
  console.log $('.data-table').dataTable

Я включил это так:

- content_for :javascript do
  = javascript_include_tag 'custom-datatables'

И я даю JavaScript в конце моего макета приложения.

Это работает, когда я обновляю страницу, но когда я захожу на эту страницу, используя турболинки, я вижу, чем $('.data-table').dataTable не определено Когда я печатаю $('.data-table').dataTable в консоли Firefox функция определена. $(document).ready кажется, сработал до полной загрузки данных.

Есть ли способ это исправить? Это лучшая практика для загрузки больших зависимостей?

1 ответ

При использовании турболинков вы должны использовать page:change событие, а не документ готов.

Итак, в вашем случае:

$(window).bind 'page:change', () ->
  console.log $('.data-table').dataTable

Я обычно предпочитаю один большой файл application.js, потому что после первой загрузки он будет кэшироваться в браузере ваших клиентов. Также в производстве оно будет минимизировано и сжато.

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