RequireJS - 将参数传递给模块进行初始化

Chr*_*gel 13 javascript module amd requirejs

可能重复:
如何在使用AMD时加载Backbone.js中的自举模型(require.js)

我目前正在为我们的一个项目创建RESTful API,并且还想提供一个Javascript库来访问它.

由于我喜欢AMD原理并使用require.js,我也会提供AMD模块.问题是:模块的初始化需要一些信息,比如初始化时的API密钥.

如何在初始化时将这些参数传递到模块中?

ggo*_*zad 14

如果你有类似的东西:

define(['dep1', 'dep2', 'dep3'], function (dep1, dep2, dep3) {

    var module = {
        ...
    };

    return module;

});
Run Code Online (Sandbox Code Playgroud)

将其更改为:

define(['dep1', 'dep2', 'dep3'], function (dep1, dep2, dep3) {
    var module = {
        ...
    };

    var init = function (options) {
        // Initialize here
        return module;

    };

    return init;
});
Run Code Online (Sandbox Code Playgroud)

然后在某个地方需要你的模块后,你可以调用它来初始化.如果您需要更复杂的东西并返回工厂,您可能还需要查看工厂模式.

require.js不会限制你返回的内容.它可以是一个简单的对象,一个字符串,一个函数......

  • 好吧,那不行.我要求在我的应用程序的不同位置使用API​​模块,并且不能将初始化参数放入每个想要使用API​​的模块中.必须在任何人使用导出的模块对象之前对其进行初始化. (2认同)

dlr*_*ust 6

我认为你所寻找的是能够设置模块拾取的配置变量.以下是使用require.js的示例

如何在使用AMD时加载Backbone.js中的自举模型(require.js)


Bis*_*opZ 1

我不认为你可以使用 require.js 做到这一点,但你可以使用Frame.js或其他一些模块库。在 Frame 中你可以这样做:

//moduleName.js

(function(exports){
    exports.moduleName = function(args){
        // do stuff
    }
})(window.exports);


// in main js file

var exports = {}; // global variable

Frame('moduleName.js');
Frame(function(next){
    var myArgs = { ... settings ... };
    exports.moduleName(myArgs);
    next();
});
Frame.init();
Run Code Online (Sandbox Code Playgroud)