Плагины jQuery и конвейер активов Rails 3 - Что я делаю не так? - PullRequest
0 голосов
/ 25 сентября 2011

Я работаю над веб-приложением в Rails 3.1, полностью (я думаю), использующим конвейер ресурсов для css, images и js.Я сталкиваюсь с довольно последовательной проблемой, когда пытаюсь реализовать плагины jQuery.Я смог решить ее в одном случае, но не в другом, и я пытаюсь выяснить, в чем заключается ключевая проблема.

По сути, я загружу плагин jQuery, а затем вызываю егов моем методе document.ready только для определения того, что подтягивание сайта приводит (например, в случае плагина jScrollPane)

 Uncaught TypeError: Object #<Object> has no method 'jScrollPane'

Я получил ту же ошибку для нескольких других плагинов.Я подумал, что дело может быть в том, что jQuery / jQuery-UI не загружался до моих плагинов, поэтому они не были созданы должным образом, но это не так.Необходимые сценарии находятся в app/assets/javascripts/... В моем app/assets/application.js у меня есть следующее:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jquery.mousewheel
//= require mwheelIntent
//= require jquery.jscrollpane.min
//= require_tree .

Результирующий application.js представляется правильным, кроме ошибок;то есть все, что я ожидал там, есть.

Что я делаю не так?Я рад предоставить любую дополнительную информацию, необходимую.

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Один недостаток с конвейером ресурсов, если вы не используете его регулярно, это то, что если у вас есть ресурсы, предварительно скомпилированные и выгруженные в public/assets/application.js, то этот предварительно скомпилированный файл может затереть файлы, поскольку они генерируются активом разработки конвейер, поэтому плагины, которые вы включили в /app/assets/application.js, перезаписываются.

Другими словами, предыдущий, все поющий, танцующий объект jquery, который вы тщательно строите с помощью этого фрагмента здесь:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jquery.mousewheel
//= require mwheelIntent
//= require jquery.jscrollpane.min
//= require_tree .

Перезаписывается уже скомпилированным кодом, описывающим объект jQuery в public/assets/application.js.

Ну, это то, что просто укусило меня, когда страница, которую я отлаживал, демонстрировала поведение, очень похожее на это.

0 голосов
/ 25 сентября 2011

Компрессоры, работающие на Javascript, могут суетиться из-за стиля кодирования плагинов.

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

Попробуйте изменить порядок своих плагинов и посмотрите, не изменит ли это отсутствующий метод.Это может дать вам подсказку о том, где пропали без вести;есть, если это проблема.

...