Конфликт между jQuery, Prototype и плагинами - PullRequest
0 голосов
/ 15 декабря 2009

Я пытаюсь отключить Prototype и jQuery в приложении rails. Я обнаружил, что jQuery успешно внедрил Prototype в приложение.

Я запустил процесс, добавив $jq = jQuery.noConflict(); в файл application.js.

Затем я начал просматривать все файлы .erb и .js в проекте, отыскивая вызовы jQuery для $ и заменяя их на $jq. Затем я добрался до некоторых файлов плагинов jQuery.

Нужно ли преобразовывать все ссылки $ в $jq в файлах плагина jQuery .js?

Ответы [ 5 ]

2 голосов
/ 01 ноября 2012

Я столкнулся с этой проблемой сегодня и упаковал код плагина как:

(function($) {
  //plugin code
})(jQuery);

не работало, пока я не переместил строку, содержащую файлы библиотеки прототипов, перед строкой, включающей файлы библиотеки jQuery.

1 голос
/ 15 декабря 2009

Или вы можете завернуть их в крышку

(function($){

// add old jQuery code here.

})($jq);
1 голос
/ 15 декабря 2009

Нужно ли преобразовывать все ссылки $ в $ jq в файлах плагина jQuery .js?

Как правило, нет. Большинство плагинов настроены на передачу объекта jQuery в виде $. Вы можете сказать, делает ли плагин это, потому что это будет выглядеть так:

(function($) {

// Actual plugin code

})(jQuery);
1 голос
/ 15 декабря 2009

Рассматривали ли вы добавление его в js-файл библиотеки прототипов? Таким образом, всякий раз, когда загружается прототип, он автоматически отключает jquery.

Мы сделали то же самое с mootools.

В ответ на ваш вопрос, если плагин написан правильно, вам не нужно менять его там. Следующее соглашение должно обернуть плагин, обеспечивая правильную работу, даже когда noconflict был включен.

;(function($) {

//plugin code

})(jQuery);
0 голосов
/ 15 декабря 2009

Попробуйте загрузить jQuery и все его плагины вместе, последовательно, и затем вызовет noConflict (). Вот пример:

<script src="/path/to/1.3.1/jquery-1.3.1.min.js" type="text/javascript"></script>
<script src="/path/to/1.3.1/jquery-ui-1.6rc6.min.js" type="text/javascript"></script>
<script src="/path/to/jquery/plugin.js" type="text/javascript"></script>
<script type="text/javascript">
    var $jq = $jq || {};
    $jq.jQuery = jQuery.noConflict(true);
</script>

Затем в вашем собственном коде вы можете ссылаться на jQ - в комплекте с желаемыми плагинами - используя переменную $ jq.jQuery.

...