Файл JavaScript для каждого представления в Rails


в соответствии с рекомендациями "ненавязчивый JavaScript" я хочу разделить свою логику JavaScript на
разные файлы. Однако я не знаю, как их организовать.

Я:

  1. просто бросьте все приложения javascript в приложение.js файл и загрузить его с макета страницы? Это простой подход, но я в конечном итоге с раздутым приложения.js. Некоторые пользователи могут захотеть посетить только пару страниц, но весь этот файл будет предварительно загружен, чего нет хороший.
  2. или я должен создать отдельный файл javaScript для каждого представления и загрузить их независимо? Это создает ряд вопросов. Как связать каждый файл js с соответствующим представлением?
    Спасибо.
5   51   2009-03-02 15:30:23

5 ответов:

загрузите основной JavaScript в приложение.Яш каждый раз. Теперь создайте файлы для различных нужд. Создайте форму.js файл, myfancypart.файл JS и т. д. Не загружайте их в приложение.формат html.Эрб макет. Загрузите их динамически, когда они вам нужны:

приложение.формат html.Эрб:

<%= javascript_include_tag "application" %>
<%= yield :javascript_includes %>

верхний.формат html.Эрб:

<% content_for :javascript_includes do %>
  <%= javascript_include_tag "forms.js" %>
<% end %>

все в блоке content_for будет загружено в yield: javascript_includes.

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

еще одна вещь, которая может вас заинтересовать, - это sprockets, менеджер зависимостей javascript, который вы можете установить с помощью gem. Вы можете получить дополнительную информацию о звездочках с сайта (http://getsprockets.org/) или со страницы github (http://wiki.github.com/sstephenson/sprockets). это делает написание больших приложений javascript гораздо более управляемым.

Это изменяется с Rails 3.1 и конвейером активов!!!

отдельные файлы лучше всего, как вы указываете. Вопросы о том, как ссылаться на них все и связать их уходит с rails 3.1, который стремится скомпилировать их все в один файл для производства.

можно использовать Jammit для включения css и javascripts файлов

для деталей:http://documentcloud.github.com/jammit/

использование:

Шаг 1:

добавить js-файлы в активы.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 %>

может быть, вы хотите использовать application_helper

def javascript(*files)
  content_for(:head) { javascript_include_tag(*files) }
end

def stylesheet(*files)
  content_for(:head) { stylesheet_link_tag(*files) }
end