Google maps 使用AMD动态加载google.maps的更干净的方法是什么?
我想利用google maps loader回调,如下所示: 我有一个使用AMD和promises实现这一点的工作示例。要加载和使用API,请执行以下操作:Google maps 使用AMD动态加载google.maps的更干净的方法是什么?,google-maps,dojo,js-amd,Google Maps,Dojo,Js Amd,我想利用google maps loader回调,如下所示: 我有一个使用AMD和promises实现这一点的工作示例。要加载和使用API,请执行以下操作: require(["path/to/google-maps-api-v3"], function (api) { api.then(function (googleMaps) { // consume the api }); }); 这是我的模块def,我希望在它完全加载后返回google.maps,而不是延迟返回:
require(["path/to/google-maps-api-v3"], function (api) {
api.then(function (googleMaps) {
// consume the api
});
});
这是我的模块def,我希望在它完全加载后返回google.maps,而不是延迟返回:
define(["dojo/Deferred"], function (Deferred) {
var d = new Deferred();
dojoConfig["googleMapsReady"] = function () {
delete dojoConfig["googleMapsReady"];
d.resolve(google.maps);
}
require(["http://maps.google.com/maps/api/js?v=3&sensor=false&callback=dojoConfig.ipsx.config.googleMapsReady&"]);
return d;
});
但解决方案返回的是一个承诺,而不是完全初始化的google.maps。我更希望它看起来像一个普通的AMD模块,但不知道如何创建一个AMD插件。下面是我根据JanMisker的例子创建的一个:
define(function () {
var cb ="_asyncApiLoaderCallback";
return {
load: function (param, req, loadCallback) {
if (!cb) return;
dojoConfig[cb] = function () {
delete dojoConfig[cb];
cb = null;
loadCallback(google.maps);
}
require([param + "&callback=dojoConfig." + cb]);
}
};
});
用法示例:
require(["plugins/async!//maps.google.com/maps/api/js?v=3&sensor=false"]);
创建一个AMD插件。下面是我根据JanMisker的例子创建的一个:
define(function () {
var cb ="_asyncApiLoaderCallback";
return {
load: function (param, req, loadCallback) {
if (!cb) return;
dojoConfig[cb] = function () {
delete dojoConfig[cb];
cb = null;
loadCallback(google.maps);
}
require([param + "&callback=dojoConfig." + cb]);
}
};
});
用法示例:
require(["plugins/async!//maps.google.com/maps/api/js?v=3&sensor=false"]);
解决方案似乎是创建一个插件:例如,是的,在我开始阅读你的评论之前,我想用“AMD插件”作为答案。编写AMD插件可以让您控制模块何时解析,同时仍然能够像其他AMD模块依赖项一样直接加载。解决方案似乎是创建一个插件:例如,是的,在我开始阅读您的评论之前,我认为“AMD插件”是答案。编写一个AMD插件可以让你控制模块何时解析,同时仍然能够像其他AMD模块依赖一样直接加载。是的,只需稍加调整<代码>加载回调(google.maps)代码>我一直在使用这种方法,现在我们发现自己在中国的用户中谷歌被屏蔽了。我发现这很有帮助,为require错误事件设置一个处理程序并自己调用
loadCallback(false)
,然后调用require的代码可以优雅地处理失败。是的,只需稍加调整<代码>加载回调(google.maps)代码>我一直在使用这种方法,现在我们发现自己在中国的用户中谷歌被屏蔽了。我发现这很有帮助,为require错误事件设置一个处理程序并自己调用loadCallback(false)
,然后调用require的代码可以优雅地处理失败。