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

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

Я создал файл с именем 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 похоже срабатывает до полной загрузки datatable.

Есть ли способ это исправить? Лучше ли загружать большие зависимости?


person Dougui    schedule 30.11.2014    source источник


Ответы (1)


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

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

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

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

person nathanvda    schedule 30.11.2014
comment
Действие никогда не запускается. Проблема с одним большим файлом в том, что он долго загружается. Моя страница загружается 20 секунд, и я ищу способ увеличить скорость. - person Dougui; 30.11.2014
comment
Никогда не запускал? Это странно. У вас есть ошибка javascript? Какую версию турболинков вы используете (хотя я почти уверен, что событие всегда называлось именно так). Вы уверены, что в вашем браузере установлен новый код JavaScript? - person nathanvda; 30.11.2014