RequireJS条件加载模块以同步方式

时间:2015-11-12 20:10:50

标签: javascript requirejs require amd js-amd

我有一个模块ModuleABC,它根据标志加载modulea或moduleb,加载这些模块后,在模块方法上调用init。

ModuleABC.js
define(['aa'],function(aa){
    var data;
    load = function(){
        if(data.IsAdmin){
            require(['moduleA'],function(modulea){
                modulea.init(data);
            });
        }
        else if
        {
            require(['moduleB'],function(moduleb){
                moduleb.init(data);
            });
        }
    }
    return initialize{
       load();
    }
})

另一个模块需要ModuleABC,但是当我到达moduleabc.load()时,我将不会调用我的modulea或moduleb init方法。

Another Module dependent on ModuleABC
require(['ModuleABC'],function(moduleabc){
    moduleabc.load();
    By the time i reach here, i will not have my modulea or moduleb init method called.
    How do I achieve this?
});

1 个答案:

答案 0 :(得分:0)

听起来load函数需要异步。此外,您的某些JavaScript无效,因此我已对其进行了更正:

<强> ModuleABC.js

define(['aa'], function (aa) {
    var data;
    function load(cb) {
        var module = data.IsAdmin ? 'moduleA' : 'moduleB';
        require([module], function (module) {
            module.init(data);
            cb();
        });
    }
    return {
       initialise: load
    };
});

<强> AnotherModule.js

require(['ModuleABC'], function (moduleabc) {
    moduleabc.load(function () {
        // By this point, either `moduleA` or `moduleB` will have been loaded and initialised
    });
});