Использовать requirejs и jquery, не затирая глобальные jquery? - PullRequest
21 голосов
/ 01 февраля 2011

Я впервые использую requirejs в проекте.Я работаю в среде, в которой уже есть много Javascript, и я ищу чистые способы представить свой собственный код.

Проблема в том, что я не могу казатьсячтобы найти модуль jQuery, который я могу загрузить, который не забивает существующий jQuery.

Я был удивлен, что даже require-jquery.js представляет глобальную версию jQuery.Есть ли способ загрузить jQuery как модуль, не вводя глобальные переменные?

Ответы [ 3 ]

24 голосов
/ 07 марта 2012

jQuery 1.7 поддерживает загрузку AMD. Но хитрость заключается в том, чтобы избежать конфликта имен модулей, поскольку jQuery жестко кодирует свое собственное имя модуля как «jquery». Если вы определяете другой модуль как jquery (скажем, в свойстве paths в вашей конфигурации requirejs), это вызовет конфликт.

Чтобы загрузить jQuery в вашей области применения requirejs, определите модуль, такой как 'jquery-loader', а когда вы хотите загрузить jQuery, сделайте это через 'jquery-loader':

define(['path/to/jquery.min'], function () {
    return jQuery.noConflict(true);
});

requirejs «кэширует» вашу ссылку на jQuery, так что noConflict будет запускаться только при первой загрузке jquery-загрузчика.

3 голосов
/ 01 февраля 2011

Несколько версий 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

0 голосов
/ 01 февраля 2011

загрузить скрипт jQuery и затем использовать var myJ = jQuery.noConflict();

или любую другую переменную, которую вы хотите

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

...