рельсы лучшие практики, где разместить ненавязчивый JavaScript - PullRequest
31 голосов
/ 23 мая 2010

Мои приложения rails (все 2.3.5) используют полный набор встроенных javascript, rjs, prototype и jquery. Давайте назовем это учебой или ростом боли. В последнее время я все больше и больше увлекаюсь ненавязчивым JavaScript. Это делает ваш html чистым, так же, как css очищает его.

Но большинство примеров, которые я видел, - это небольшие примеры, и они помещают весь javascript (jquery) в application.js

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

orders.html.erb
orders.js

где orders.js содержит ненавязчивый javascript, специфичный для этого представления. Но, может быть, я слишком консервативен:)

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

Итак, мои вопросы:

  • как вы лучше структурируете свой ненавязчивый javascript; управляйте своим кодом, как вы убедитесь, что из HTML ясно, что что-то должно делать. Я думаю, хорошие имена классов имеют большое значение:)
  • как вы упорядочиваете свои файлы, загружаете их все в? немного? Вы используете content_for :script или javascript_include_tag в своем представлении, чтобы загрузить соответствующие сценарии. Или ...?
  • вы пишете очень общие функции (например, удаление) с параметрами (добавить дополнительные атрибуты?) Или вы пишете очень специфические функции (СУХОЙ?). Я знаю, что в Rails 3 есть стандартный набор, и там все ненавязчиво. Но как начать в Rails 2.3.5?

Вкратце: как лучше всего делать ненавязчивый javascript в рельсах? :)

Ответы [ 3 ]

10 голосов
/ 23 мая 2010

Не думаю, что есть одна лучшая практика, но я дам вам знать, что я делаю.

  1. У меня есть серия js-файлов, каждый из которых имеет свое назначение в каталоге public/javascripts/. Некоторые примеры могут быть utility.js chat.js shopping_basket.js и так далее.

  2. Я использую упаковщик ресурсов и определяю одну большую коллекцию жира для всех моих общих функций использования, а другую - только для администратора. Туда и обратно обходятся слишком дорого. Я в основном включаю все js в загрузку первой страницы, сведенную в один BLOB-объект (в общем)

  3. Я допускаю базовые $(document).ready встроенные хуки на страницах и сохраняю их очень короткими.

  4. Данные, необходимые для доступа к моим js-файлам, отображаются на странице. (Обычно в DOM, иногда в виде переменных - например, var xyz = 100)

  5. Обычно я разрабатываю свои контроллеры с отключенным javascript (и проверяю, все ли работает), затем включаю его и высыпаю несколько if request.xhr? при необходимости.


Имейте в виду, в Rail 3.1 представлена ​​встроенная передовая практика, см .: http://guides.rubyonrails.org/asset_pipeline.html - лично я столкнулся с проблемами производительности и конфигурации нового конвейера, однако многие другие добились больших успехов с Это.

3 голосов
/ 29 мая 2010

Я недавно задокументировал, как я управлял JavaScript в Ruby on Rails . Я в основном разбиваю вещи на множество мелких, детализированных файлов, каждый с соответствующим пространством имен, а затем объединяю их все в один файл для производства с помощью asset_packager.

1 голос
/ 18 октября 2010

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

...