Рельсы лучшие практики, где разместить ненавязчивый 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 в рельсах?:)
Ответы
Ответ 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, которые применимы только к конкретному страница действия. Если ничего другого, это по крайней мере еще один подход к добавлению к вашим параметрам.