可能重复:
如何在使用AMD(require.js)加载自举模式在Backbone.js的
我目前正在创建一个RESTful API,用于我们的项目之一,也是想提供一个JavaScript库来访问它。
因为我喜欢AMD的工作原理,使用require.js,我将提供一个AMD模块为好。 问题是:该模块的初始化需要像初始化的API密钥的一些信息。
我如何通过这样的参数为在initalization模块?
可能重复:
如何在使用AMD(require.js)加载自举模式在Backbone.js的
我目前正在创建一个RESTful API,用于我们的项目之一,也是想提供一个JavaScript库来访问它。
因为我喜欢AMD的工作原理,使用require.js,我将提供一个AMD模块为好。 问题是:该模块的初始化需要像初始化的API密钥的一些信息。
我如何通过这样的参数为在initalization模块?
如果你有这样的:
define(['dep1', 'dep2', 'dep3'], function (dep1, dep2, dep3) {
var module = {
...
};
return module;
});
将其更改为:
define(['dep1', 'dep2', 'dep3'], function (dep1, dep2, dep3) {
var module = {
...
};
var init = function (options) {
// Initialize here
return module;
};
return init;
});
然后要求你的模块某处后,你可以调用它来初始化。 您可能还需要寻找到工厂模式,如果你需要更复杂的东西,并返回工厂。
require.js不限制你在你回来的。 它可以是一个简单的对象,一个字符串,一个功能...
我觉得你想找的是设置获得由模块拿起配置变量的能力。 下面是使用require.js一个例子
如何在使用AMD(require.js)加载自举模式在Backbone.js的
那,我便想起一个另一种可能性是使用服务器端脚本来操作,当你要求它的模块的源。
例如,当你必须通过一个API密钥到模块,请执行以下操作:
你做你的第一个定义()调用之前,把下面的代码:
require.config({
paths: {
api: 'https://api.example.com/api.amd.js?api_key=f615ac61&'
}
});
这使您可以简单地这样从任何地方需要你的API:
require(['api'], function(api){
});
因此,服务器临危请求 - 把它映射thorugh mod_rewrite的一些脚本,把把GET参数,并把它放在在模块源代码中的正确位置,然后返回自定义源。
这就是我现在解决了这个方式,它就像一个魅力,而不需要改变开发商的任何行为和它使用的功能这就是已经建成requirejs。
我不认为你可以做到这一点require.js,但你可以Frame.js或一些其他的模块库。 在框,你会是这样做的:
//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();
是否有可能使用一个命名空间的变量,然后引用合适的对象,当你初始化特定的库? 也许我不完全明白你想要require.js做什么,但它看起来就像你在任何情况下你main.js称呼它,所以我敢肯定它会工作...我不认为你可以不喜欢它<script = "require.js?apiKey=jsdfhjkfklsjkfdjks">
var libData = {
apiKey: "jsdfhjkfklsjkfdjks",
otherpram: "userIDorsomething"
}
require(libData.apiKey);
但如果你需要发送apikey在页面的URL参数,你可以使用这样一个脚本来获取参数:
<script>
function getQueryParams(qs) {
qs = qs.split("+").join(" ");
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])]
= decodeURIComponent(tokens[2]);
}
return params;
}
// assuming the page is loaded like page.html?apikey=jsdfhjkfklsjkfdjks
apiKey = getQueryParams(document.location.search).apiKey;
然而//你要调用要求,通过API密钥?
</script>