2016-02-10 94 views
1

我使用谷歌地圖API V3的「X」和得到這個錯誤,而使用遺漏的類型錯誤:無法讀取屬性未定義common.js

map.fitBounds(範圍);功能

這裏是控制檯 enter image description here

,這裏的錯誤快照是代碼:

var arr = [{lat: -25.363, lng: 131.044}, {lat: 12.97, lng: 77.59}]; 
for (i = 0; i < arr.length; i++) { 
    bounds.extend(new google.maps.LatLng(arr[i])); 
} 
map.fitBounds(bounds); //If I comment this line in m code, the error is gone but map does not load. 

是什麼問題?我又該如何解決它?

+1

顯示您的全部代碼 –

+0

請參閱代碼現在.. – Gora

+0

是onload方法中的代碼? –

回答

0

google.maps.LatLngBounds.extend方法不會將google.maps.LatLngLiteral對象作爲參數(尚)。

extend(point:LatLng) | Return Value: LatLngBounds

Extends this bounds to contain the given point.

將它們翻譯成google.maps.LatLng對象。

var bounds = new google.maps.LatLngBounds(); 
var arr = [{lat: -25.363,lng: 131.044}, {lat: 12.97,lng: 77.59}]; 
for (i = 0; i < arr.length; i++) { 
    bounds.extend(new google.maps.LatLng(arr[i].lat, arr[i].lng)); 
} 
map.fitBounds(bounds); 

proof of concept fiddle

代碼片段:

function initialize() { 
 
    var map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    var bounds = new google.maps.LatLngBounds(); 
 
    var arr = [{lat: -25.363,lng: 131.044}, {lat: 12.97,lng: 77.59}]; 
 
    for (i = 0; i < arr.length; i++) { 
 
    var marker = new google.maps.Marker({ 
 
     position: arr[i], 
 
     map: map 
 
    }); 
 
    bounds.extend(new google.maps.LatLng(arr[i].lat, arr[i].lng)); 
 
    } 
 
    map.fitBounds(bounds); 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map_canvas"></div>

+0

謝謝你的小提琴。一個完美的解決方案不起作用。 – Gora

+0

你有同樣的錯誤?請提供[最小,完整,測試和可讀示例](http:// stackoverflow。com/help/mcve),在你的問題中展示了這個問題。 – geocodezip

+0

是的,我有同樣的錯誤。你提供的小提琴是我使用的完美代碼。你能提出什麼可以成爲問題嗎? – Gora

10

我的猜測是某處在你的代碼中有一個self = this沒有在它前面一個var聲明。

當您忘記var時,您正在創建一個全局變量 - 或者在本例中,將全局self重新定義爲您的本地函數。這將導致其預計谷歌地圖代碼self打嗝是Window並導致Uncaught TypeError: Cannot read property 'x' of undefined(…)

這種錯誤就是爲什麼一些開發商喜歡用that或其他一些術語,而不是self的控制範圍。如果你是一位超級謹慎的編碼人員,並且永遠不會忘記你的聲明,那麼你會好起來的。但對於我們中的那些人誰偶爾會陷入困境,利用that可以節省令人沮喪的調試時間。*

*   那些超級小心程序員會說,我們應得令人沮喪調試的時間,因爲我們是不小心 :)

+0

在我的情況下,transpiler爲我做了'self = this'(使用ecma6)。這個答案確實節省了我的一天,謝謝。 – Daniele

+2

如果你對誰是那個「自我」感到困惑,只需在錯誤中放入一個缺點並在chrome控制檯中輸入「self」即可。 –

+0

男人!你剛剛救了我的一天!謝謝! –

相關問題