[英]How can i solve a javascript error "undefined" is not a object when using google.maps.geometry.spherical.computeOffset?
[英]How can google.maps.geometry be undefined?
我正在使用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;
});
即使在使用優化器縮小代碼之后,這在大多數情況下都能正常工作。 但是,有時我得到一個錯誤,說gmaps.geometry is undefined
在gmaps
作為依賴項的模塊中gmaps.geometry is undefined
,並嘗試計算距離:
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);
}
}
});
只有當我嘗試在頁面之后執行calcDistance
並且所需數據已加載且有時僅執行時,才會發生這種情況。 我想這是gmaps異步加載的一些問題,但我不完全理解它。 如何定義gmaps但gmaps.geometry未定義? 有沒有什么辦法解決這一問題?
看來你沒有加載正確的庫。 只需在庫url中附加&libraries=geometry
。
packages:[geometry]
似乎沒有像我想象的那樣工作,因此幾何體根本沒有加載。 Google似乎在某些時候在內部加載幾何體,因此我的距離計算代碼在大多數情況下都有效。 我通過將我的gmaps
模塊的define調用更改為:
define('gmaps', ['goog!maps,3.9,language:de,other_params:libraries=geometry&sensor=false&channel=...&client=...'],
function(){
return window.google.maps;
});
我知道這是一個老問題,但在我的情況下,我看到幾何庫在初始化時不可用。 我不知道為什么。 但它在一段時間后就被定義了。 所以我使用wait函數解決了這個問題。
setTimeout(waitForGeometryLibraries, 250);
function waitForGeometryLibraries(){
if(typeof google.maps.geometry !== "undefined"){
// code using geometry library
}
else{
setTimeout(waitForGeometryLibraries, 250);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.