2014-11-03 158 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

呃'jquery.plugin1'依赖返回'undefined'。 – 2014-11-03 02:47:24

+0

对不起,我不明白为什么jquery.plugin1返回undefined。如果使用片段2,它运行良好,也可以使用jquery.plugin1 – user1438980 2014-11-03 02:55:32

回答

1

这不起作用:

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

因为你给你的匿名函数的参数只是将其之前获得相同的顺序从依赖关系列表中的值所以$说法得到模块的价值jquerymod1参数从jquery.plugin1获取其值,并且模块mod1的值作为第三个参数传递,但您必须使用自动变量arguments才能得到它,因为您没有指定第三个参数。

注意jQuery插件通过修改$而不是由返回一个值,以便作为一个模块插件jquery.plugin1的值是undefined安装自己。

当你做到这一点,它的工作原理:

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

因为依赖性的顺序正确地体现在参数的顺序。

+0

哦,我明白了。我只是认为所有jquery插件将被加载在一起并用作'$'。感谢您的解释。 – user1438980 2014-11-04 01:51:59