Подтвердить что ты не робот

Рельсы лучшие практики, где разместить ненавязчивый javascript

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

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

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

orders.html.erb
orders.js

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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


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

Ответ 2

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

Ответ 3

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