Как правильно работать с jQuery в конвейере Rails 3.1? - программирование
Подтвердить что ты не робот

Как правильно работать с jQuery в конвейере Rails 3.1?

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Надеюсь, это очистит некоторые вещи!