2014-10-17 50 views
0

有一个代码(模块模块1,模块2和单词数被同时加载):如何在RequireJS中结合不同的模块加载方式?

define(['module1', 'module2', 'module3'], function (module1, module2, module3) { 
    return { /* ... */ }; 
}); 

还有另外一个(模块1和模块2被装载一个又一个单词数是按需加载,动态地) :

define(function (require) { 
    var module1 = require('module1'); 
    var module2 = require('module2'); 
    return { 
     loadModule3: function() { 
      var module3 = require('module3'); 
     } 
    }; 
}); 

如何可以如在第一实施例的同时结合这两种方法,使模块1和2至负载,并且单词数,以如在第二示例动态加载(但不产生附加的模块) ?

回答

1

第二个示例不像您想象的那样工作。 define(function(require) { ... })语法只是一个syntactic sugar,它基本上被转换为类似于第一个示例的异步调用,在模块函数执行之前并行加载全部三个所需的模块。

如果你真的打算强制执行的加载顺序,你会去是这样的:

define(function (require) { 
    // these two modules will be loaded in parallel 
    var module1 = require("module1"); 
    var module2 = require("module2"); 
    return { 
     loadModule3: function() { 
      // this module will be loaded "on-demand", when `loadModule3` is called 
      require(["module3"], function(module3) { 
       // here modules 1,2 and 3 are available 
      }); 
     } 
    }; 
}); 

请注意,你所谓的“按需”装载将确保“单词数”可里面的回调函数,那么依赖于module3的代码路径应该从那里开始。