#jquery #prototypejs #selectize.js
#jquery #prototypejs #selectize.js
Вопрос:
Мое приложение использовало prototype.js на какое-то время. Сейчас я пытаюсь использовать jQuery и плагин jquery для некоторой расширенной функциональности. Однако prototype.js и jQuery создает конфликт для использования переменной ‘$’. Это, конечно, может быть разрешено методом noConflict(), предоставляемым jQuery, и, следовательно, я могу изменить ярлык jQuery на то, что я хочу. Проблема в том, как мне использовать плагин jQuery, который я хочу импортировать. Конечно, есть лучший способ, чем найти и заменить все переменные ‘$’.
Используемый плагин ‘Selectize’ https://github.com/brianreavis/selectize.js
Комментарии:
1. Работает ли это, если заменить все переменные $?
2. К какому плагину вы относитесь?
Ответ №1:
Вы отредактировали свой вопрос, чтобы сказать:
Используемый плагин ‘Selectize’ https://github.com/brianreavis/selectize.js
Этот плагин вообще не полагается на глобальный $
символ; вам ничего не нужно делать, чтобы сделать плагин совместимым с сайтом, который использует $
для чего-то другого (например, Prototype). Плагин полагается только на jQuery
символ. (Он использует $
внутренне, но только как локальную переменную; он не использует глобальную.) Любой правильно написанный плагин jQuery избегает использования глобальной $
из-за этой самой проблемы.
Чтобы использовать это на своем сайте, вы должны сделать что-то вроде этого:
<script src="/path/to/prototype.js"></script>
<script src="/path/to/jquery.js"></script>
<script src="/path/to/your/code.js></script>
… где ваш код может выглядеть следующим образом:
(function() {
var $j = jQuery.noConflict();
$j("some-selector").pluginMethod(); // jQuery
$("some-id").addClassName("foo"); // Prototype
})();
(Вам не нужна функция-оболочка там, это просто для того, чтобы избежать создания $j
глобального).
Или просто:
jQuery.noConflict();
jQuery("some-selector").pluginMethod(); // jQuery
$("some-id").addClassName("foo"); // Prototype
Комментарии:
1. Огромное спасибо. Мой плохой.
2. @Zeutheus: Не беспокойтесь, рад, что помогло. (Ваш плохой? Не следуя, ваш вопрос был вполне разумным.)
Ответ №2:
Я думаю, что у T.J. Crowder есть хороший ответ, но в качестве альтернативы, если вам нужно управлять конфликтами и т. Д. Во всем вашем проекте. Возможно, вы захотите рассмотреть requirejs.
Я не буду вдаваться в подробности о requirejs, поскольку их можно найти на его сайте.
RequireJS — это загрузчик модулей, помогающий справляться с подобными проблемами, и имеет функции, помогающие с javascript, который не соответствует шаблону асинхронного модуля.
Вот статья, в которой обсуждается его использование с jQuery и плагинами. http://requirejs.org/docs/jquery.html