Yin*_*ang 8 javascript asynchronous google-maps-api-3 requirejs
我正在使用Google Maps Javascript API v3和RequireJS编写JavaScript应用程序.我为gmaps编写了一个小包装器,以便正确地获取依赖关系:
define('gmaps', ['goog!maps,3.9,packages:[geometry],language:de,other_params:sensor=false&channel=...&client=...'],
function(){
return window.google.maps;
});
Run Code Online (Sandbox Code Playgroud)
即使在使用优化器缩小代码之后,这在大多数情况下都能正常工作.但是,有时我会gmaps.geometry is undefined在一个模块中出现错误,该模块具有gmaps依赖关系并尝试计算距离:
define(['gmaps'], function(gmaps) {
return {
...
calcDistance: function(target) {
var position = this.getPosition();
var distance = gmaps.geometry.spherical.computeDistanceBetween(
new gmaps.LatLng(position.latitude, position.longitude),
new gmaps.LatLng(target.latitude, target.longitude)
);
return (distance / 1000).toFixed(2);
}
}
});
Run Code Online (Sandbox Code Playgroud)
只有当我尝试calcDistance在页面之后执行并且所需数据已加载且有时仅执行时,才会发生这种情况.我想这是gmaps异步加载的一些问题,但我不完全理解它.如何定义gmaps但gmaps.geometry未定义?有没有什么办法解决这一问题?
packages:[geometry]似乎不像我想象的那样工作,所以几何图形根本没有加载。谷歌似乎在某个时刻内部加载几何图形,因此我的距离计算代码在大多数情况下都有效。我通过将模块的定义调用更改gmaps为:
define('gmaps', ['goog!maps,3.9,language:de,other_params:libraries=geometry&sensor=false&channel=...&client=...'],
function(){
return window.google.maps;
});
Run Code Online (Sandbox Code Playgroud)