Использовать requirejs и jQuery, без Clobbering Global jQuery?
Вопрос
Я впервые использую requirejs в проекте. Я работаю в среде, в которой уже есть много JavaScript, и я ищу чистые способы представить свой собственный код.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти модуль jQuery, который я могу загрузить, который не Clobber существующий jQuery.
Я был удивлен, что даже require-jquery.js представляет глобальную версию jQuery. Есть ли способ загрузить jQuery в качестве модуля, не представляя никаких глобалов?
Решение
JQUERY 1.7 поддерживает загрузку AMD. Но хитрость заключается в том, чтобы избежать конфликта на наименовании модуля, поскольку jQuery жестко кодирует свое собственное название модуля как «jQuery». Если вы определяете другой модуль как «jQuery» (скажем, в свойстве «путей» в вашей конфигурации requirejs), это вызовет указанный конфликт.
Чтобы загрузить jQuery в ваш приложение для приложений, определите модуль, такой как «jQuery-Loader», и когда вы хотите загрузить jQuery, сделайте это через «jquery-loader»:
define(['path/to/jquery.min'], function () {
return jQuery.noConflict(true);
});
Требование JS будет «кэшировать» вашу ссылку на jQuery, так что NoConflict будет работать только в первый раз, когда загружается jQuery-Loader.
Другие советы
Несколько версий jQuery на одной странице плохие. Прекратите взломать и обновить jQuery или использовать старую версию.
Что касается сохранения $
безопасная попытка
(function($) {
// requirejs inclusion block for loading
}(jQuery.noConflict(true));
Если вы пройдете true
к .noConflict
он заменит старый jQuery
переменная и не разрушать это во всем мире.
Это означает, что вы можете пройти его тихо. Скажи, что у тебя есть
<script src="jquery-1.2">
<script src="jquery-1.5">
Тогда использование приведенного выше кода поместит 1.2 $
& jQuery
Вернуться в глобальное пространство и дать вам 1,5 jQuery как местный $
в вашем закрытии
Я снова советую Снова Использование нескольких версий, потому что это правильный беспорядок и кошмар обслуживания.
Если вы используете 1.5, вы также можете использовать .sub
чтобы позволить вам расширить jQuery
локально без повреждения глобального jQuery
Загрузите сценарий jQuery, а затем используйте var myJ = jQuery.noConflict();
или какую -либо яркую переменную, которую вы хотите