Файл JavaScript для просмотра в Rails
В соответствии с рекомендациями "ненавязчивого JavaScript" я хочу разделить логику JavaScript на
отдельные файлы. Однако я не знаю, как их организовать.
Должен ли я:
- Просто бросьте все javascript приложения в файл Application.js и загрузите его с помощью страницы макета? Это простой подход, но в итоге у меня будет раздутый Application.js. Некоторые пользователи могут захотеть посетить только пару страниц, но весь этот файл будет предварительно загружен, что не очень хорошо.
- Или мне нужно создать отдельный файл javaScript для каждого представления и загрузить их самостоятельно? Это создает набор вопросов. Как связать каждый js файл с соответствующим представлением?
Спасибо.
Ответы
Ответ 1
Загружать основной JavaScript в application.js каждый раз. Теперь создайте файлы для разных нужд. Создайте файл form.js, файл myfancypart.js и т.д. Не загружайте их в макет application.html.erb. Загружайте их динамически, когда они вам понадобятся:
application.html.erb:
<%= javascript_include_tag "application" %>
<%= yield :javascript_includes %>
верхняя часть вашего view.html.erb:
<% content_for :javascript_includes do %>
<%= javascript_include_tag "forms.js" %>
<% end %>
Все содержимое блока content_for будет загружено с выходом: javascript_includes.
Ответ 2
Я предлагаю поместить все это в один файл, который вы можете затем свернуть и сжать. Клиенту нужно будет загрузить его только один раз, поскольку он будет кэшироваться при всех последующих запросах.
Еще одна вещь, которая может вас заинтересовать - это sprockets, менеджер зависимостей javascript, который вы можете установить с помощью gem. Вы можете получить дополнительную информацию о звездочках на веб-сайте (http://getsprockets.org/) или на странице github (https://github.com/rails/sprockets). Это делает написание больших приложений на JavaScript намного более управляемым.
Ответ 3
Это изменяется с помощью Rails 3.1 и конвейера активов!!!
Разделяйте файлы лучше, как вы указываете.
Вопросы о том, как ссылаться на них и связывать их, уходят с rails 3.1, целью которого является их компиляция в отдельные файлы для производства.
Ответ 4
Можно использовать Jammit для включения файлов css и javascripts
для деталей: http://documentcloud.github.com/jammit/
Использование:
шаг 1:
Добавить js файлы в assets.yml(см. код ниже)
JavaScripts:
footer:
- app/javascripts/lib/*.js
- app/javascripts/jquery-plugins/*.js
- app/javascripts/custom/*.js
- app/javascripts/application.js
Заголовок:
- app/javascripts/core/*.js
- app/javascripts/head/*.js
Шаг 2:
Добавьте простой код в макет приложения:
<%= include_javascripts :header %>
<%= include_javascripts :footer %>
Ответ 5
возможно, вы хотите использовать application_helper
def javascript(*files)
content_for(:head) { javascript_include_tag(*files) }
end
def stylesheet(*files)
content_for(:head) { stylesheet_link_tag(*files) }
end