мои приложения направляющих (все 2.3.5) используют общее соединение встроенного JavaScript, rjs, прототипа и jQuery. Давайте назовем это изучением или болезнью роста. В последнее время я был все более страстно увлечен незаметным JavaScript. Это делает Ваш HTML чистым, таким же образом CSS очистила его.
Но большинством примеров, которые я видел, являются небольшие примеры, и они помещают весь JavaScript (jQuery) внутри application.js
Теперь у меня есть довольно большое приложение, и я продумываю способы структурировать мой js. Мне нравится так или иначе, что мой сценарий все еще близко к представлению, таким образом, я думаю что-то как
orders.html.erb
orders.js
где orders.js содержит незаметный JavaScript, характерный для того представления. Но возможно это - просто я являющийся слишком консервативным :)
Я прочитал некоторые сообщения Yehuda Katz об этой самой проблеме здесь и здесь, где он занимается этой проблемой. Это пройдет Ваши js-файлы и только загрузит относящихся к Вашему представлению. Но увы я не могу найти текущую реализацию.
Так мои вопросы:
content_for :script
или javascript_include_tag
в Вашем представлении для загрузки соответствующих сценариев. Или...?Короче говоря: каковы лучшие практики для того, чтобы сделать незаметный JavaScript в направляющих?:)
Я не думаю, что существует одна лучшая практика, но я расскажу вам, что я делаю.
У меня есть ряд js-файлов, каждый со своей целью в каталоге public/javascripts/
. Примерами могут быть utility.js
chat.js
shopping_basket.js
и так далее.
Я использую asset packager и определяю одну большую толстую коллекцию для всех моих функций общего использования, а другую - только для функций администратора. Поездки на сервер обходятся слишком дорого. Я в основном включаю все js при первой загрузке страницы, минифицированные в один блок (в общем)
Я разрешаю основные $(document).ready
хуки inline на страницах, и держу их очень короткими.
Данные, к которым нужно обращаться моим js-файлам, выводятся в страницу. (Обычно в DOM, иногда как переменные - например, var xyz = 100
)
Обычно я разрабатываю контроллеры с выключенным javascript (и убеждаюсь, что все работает), затем включаю его и добавляю несколько if request.xhr?
, где это необходимо.
Имейте в виду, что в Rail 3.1 появилась встроенная лучшая практика, см: http://guides.rubyonrails.org/asset_pipeline.html - лично у меня возникли проблемы с производительностью и конфигурацией нового конвейера, однако у многих других он работает очень успешно.
Недавно я описал, как я управляю javascript в Ruby on Rails. В основном я разбиваю все на множество мелких, гранулированных файлов, каждому из которых присваивается соответствующее пространство имен, а затем объединяю их все в один файл для производства с помощью asset_packager.