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

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

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

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

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

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

Итак, какова наилучшая практика? Правильно ли я понимаю элементы div, специфичные для контроллера? Противоречит ли включенное по умолчанию дерево внутри application.js целям конкретного контроллера js?


person justingordon    schedule 01.01.2012    source источник


Ответы (2)


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

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

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

person Robin    schedule 01.01.2012

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

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

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

person Richard Hulse    schedule 01.01.2012