Как правильно работать с jQuery в конвейере ресурсов Rails 3.1? - PullRequest
16 голосов
/ 23 ноября 2011

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

Например, при работе с моей моделью User, у меня может быть какой-то код, который я хочу запустить, когда документ будет готов. Допустим, я поместил это в $(document).ready(function() {...}); в файле users.js, созданном Rails 3.1.

На следующий день я работаю с моделью Pet, и у меня есть код, который я хочу запустить с документом, готов. Я поместил это в другой $(document).ready(function() {...}); внутри pets.js файла, который готовит Rails.

Здесь возникают мои вопросы:

  1. Как это компилируется при запуске приложения?
  2. Создаю ли я экземпляры двух экземпляров jQuery в приведенном выше примере?
  3. Должен ли я использовать $(document).ready(function() {...}); только один раз в приложении или Rails компилирует мой код в один вызов?
  4. Что входит в файлы .js для конкретной модели?
  5. Есть ли различия между тем, как он будет выполняться в режимах разработки и производства?

Ответы [ 2 ]

12 голосов
/ 23 ноября 2011

1) Компиляция: конвейер ресурсов Rails просто объединяет все файлы JavaScript в один большой файл.

2) jquery загружается только один раз, у вас есть несколько $(document).ready функций, но это не проблема

3) Rails ничего не делает с вызовом, и jQuery может безопасно обрабатывать больше таких блоков на странице.

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

5) При разработке активы компилируются по каждому запросу, в производстве это делается только один раз. Также в производстве его можно минимизировать и сжать.

Надеюсь, это поможет.

3 голосов
/ 23 ноября 2011

Я постараюсь ответить на некоторые из них для вас. Вы действительно хотите только 1 готовый вызов документа на страницу, но это не имеет значения, если у вас есть кратные. Все, что в них содержится, будет кодом, который выполняется после загрузки DOM в браузер. Rails не сделает ничего волшебного с javascript, он останется таким же, как вы пишете в своих файлах. Rails не будет скомпилировать код javascript в стиле фанк, для производственных сред он может минимизировать его, но фактический код останется в основном таким же. Это выполняется браузером, а не сервером.

Вы не создаете 2 экземпляра, поскольку jQuery загружается только один раз, а затем на него ссылаются. Вызов $ (document) .ready () - это просто функция, не более того.

Файлы jquery для конкретной модели можно использовать вместе с Ajax в приложении rails. Таким образом, вы можете иметь файлы типа 'create.js.erb', который на самом деле является файлом javascript, в который вы можете передавать действия rails. Если вы хотите запустить какой-то определенный код после поста создания / удаления, вы можете использовать такие файлы, чтобы сделать это, вам просто нужно ответить на javascript в вашем контроллере rails - но это идет немного глубже, чем вы подразумеваете под выглядит ваш вопрос выше.

Главное, что нужно помнить, это то, что jquery - это просто javascript, а javascript запускается браузером - на внешнем интерфейсе без какой-либо динамической интеграции всегда запускается на стороне клиента, а jquery в основном хорош для манипулирования DOM.

Надеюсь, это кое-что прояснит!

...