Asset Pipeline и Rails 3.1 JS библиотека специфична только для одной страницы в одном контроллере - PullRequest
1 голос
/ 01 января 2012

Я думаю, документы http://guides.rubyonrails.org/asset_pipeline.html нуждаются в уточнении. Они заявляют:

Например, если сгенерирован ProjectsController, будет новый файл в app / assets / javascripts / projects.js.coffee и другой в Приложение / активы / таблицы стилей / projects.css.scss. Вы должны поставить любой JavaScript или CSS уникальны для контроллера внутри соответствующего ресурса файлы, так как эти файлы могут быть загружены только для этих контроллеров с такими строками, как <% = javascript_include_tag params [: controller]%> или <% = stylesheet_link_tag params [: controller]%>.

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

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

Этот ответ здесь Используя Rails 3.1, куда вы помещаете свой "специфичный для страницы" код javascript? , кажется, предлагает разумный способ решения этой проблемы - связать функции JS с divs, и когда JQuery делает не видеть div на странице, ничего не выполняется.

Так, какова лучшая практика? Правильно ли мое понимание специфики контроллера? Разве по умолчанию включение дерева в application.js противоречит целям контроллера js?

Ответы [ 2 ]

0 голосов
/ 02 января 2012

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

Вероятно, вы создадите разные "связки"файлы, некоторые из них будут просто включены в определенные страницы.
Например, мой application.js просто требует библиотеки и все файлы в папке приложения.Таким образом, вы все равно можете использовать js для конкретной страницы.

Полагаю, что <%= javascript_include_tag params[:controller] %> может быть полезно, если у вас есть большие файлы javascript, специфичные для какого-либо контроллера.

0 голосов
/ 02 января 2012

Это конфликтует - вы должны выбрать один подход (require_tree) или другой (загрузить каждый файл контроллера).

Первый вариант является оптимальным, и он просто нацелен на js для конкретной страницы с классами css.

Единственный раз, когда вы не захотите это делать, это для административных разделов (где вы будете использовать второй манифест) или для какой-либо другой специальной функции, такой как галерея лайтбоксов, которая находится только на определенных страницах (так что вы не хотите дополнительные js и css везде на сайте).

...