我正在使用AMD模块模式,到目前为止,隐藏本来是全局对象的内容相对简单:
define([], function(){
/*jquery here */
var tmp = $;
$ = undefined;
return tmp;
}
然而,我很好奇是否可以使用google的全局对象做类似的事情(我猜他们真的很喜欢这些..地图,几乎所有的API都使用em)。
在执行我之前所做的事情实际上会破坏代码,因为。似乎内部谷歌通过从动态加载的脚本调用全局window.google对象来自我引用自身。
我会继续调查但很好奇你们都在想什么!
感谢。
答案 0 :(得分:1)
如果你使用RequireJS作为你的AMD加载器,你可以使用config shims来包装非AMD模块,表达它们的依赖关系,执行任何必要的初始化(你可以在哪里)清除他们的全局,如果脚本支持它)并导出他们的全局。
对于谷歌地图,这看起来像这样(不,你可能不想清除全球谷歌变量):
require.config({
paths: {
"maps": "https://maps.googleapis.com/maps/api/js?key=API_KEY"
},
shims: {
"maps": {
exports: "google.maps"
}
}
});
稍后,您可以将其用作常规AMD模块:
require(["maps"], function(maps) {
var map = new maps.Map(document.getElementById("map-canvas"), ....);
...
});