2014-11-03 5 views
-2

определяет модули ниже с помощью RequireJS:RequireJS порядка нагрузки зависимости

define('mod1', ['jquery'], function($){ 
    return function mod1(){ 
     //do something 
    } 
}); 

define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){ 
    var mod2 = mod2||{}; 
    mod2.A = function(){ 
     return new mod1(); 
    } 
}) 

Если определить mod2 как выше, когда код выполнения в new mod1(), он будет бросать mod1 is undefined. Если я определяю mod2, как показано ниже, работает нормально.

define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){ 
    var mod2 = mod2||{}; 
    mod2.A = function(){ 
     return new mod1(); 
    } 
}) 

Может ли кто-нибудь объяснить причину и как RequireJS работает при загрузке зависимости?

+0

Uhh. Функция 'jquery.plugin1' возвращает' undefined'. –

+0

Извините, я не понял, почему jquery.plugin1 возвращает undefined. если использовать фрагмент 2, он работает хорошо, а также может использовать jquery.plugin1 – user1438980

ответ

1

Это не работает:

define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){ 

Поскольку аргументы вы даете на анонимные функции получить значения из списка зависимостей непосредственно перед в том же порядке Так $ аргумент получает значение модуля jquery и аргумент mod1 получает свое значение от jquery.plugin1, а значение модуля mod1 передается как 3-й аргумент, но вам нужно будет использовать автоматическую переменную arguments, чтобы получить ее, потому что вы не указали третий аргумент.

Обратите внимание, что Jquery плагины установить себя, изменив $, а не возвращения значение, так что значение плагина jquery.plugin1как модуль является undefined.

Когда вы сделаете это, он работает:

define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){ 

Поскольку порядок зависимостей правильно отражается в порядке аргументов.

+0

о, я вижу. Я просто подумал, что все jquery-плагины будут загружаться вместе и использоваться как «$». Спасибо за объяснение. – user1438980