2
我目前正在使用Google Maps API v3,使用jQuery和MarkerClusterer。Javascript長度結果與數組不同
我注意到「長度」結果的一個奇怪的問題。所以,我會告訴你我的評論代碼:
文件data.json包含大約1800個對象。
function initialize() {
$('#map_canvas').gmap({'zoom': 6, 'center': (new google.maps.LatLng(46.679594, 2.109375)), 'mapTypeId': google.maps.MapTypeId.ROADMAP, 'disableDefaultUI':true}).bind('init', function(evt, map) {
var mstime = new Date().getTime(); // to avoid caching
var markerslist = new Array(); // This array will gets points informations
$.getJSON('data.json?'+mstime, function(data) {
for (var i = 0; i < data.markers.length; i++) {
var val = data.markers[i];
var t = new Object();
t.lat = val.lat;
t.lng = val.lng;
t.name = val.label;
markerslist.push(t); // pushing point info in markerslist
}
});
alert(markerslist.length); // This first alert returns "0" !
alert(markerslist.length); // This new return the right count (about 1800). Weird!
for(var i = 0; i < markerslist.length; i++) { // To create markers on map
$('#map_canvas').gmap('addMarker', {
'position': new google.maps.LatLng(markerslist[i].lat, markerslist[i].lng)
}).click(function() {
$('#map_canvas').gmap('openInfoWindow', { content : 'Hello world!' }, this);
});
}
$('#map_canvas').gmap('set', 'MarkerClusterer', new MarkerClusterer(map, $(this).gmap('get', 'markers')));
});
}
綜上所述,此代碼的工作完美地與至少一個警報...... 如果刪除這兩個警報,此代碼不能正常工作。
感謝你的幫助, 問候
嗨,謝謝!更好:警報返回正確的數字。標記在地圖上。但是:MarkerClusterer現在不工作... –
哦,這很愚蠢,我在最後一行替換$(this)to $('#map_canvas')...謝謝! –
@chrislabricole - 我看到你在那裏使用'$(this)'。回調中的'this'的上下文是不同的。您應該將外部函數中的值存儲在變量中,並在回調中使用該變量。也就是說,在回調函數執行'var $ self = $(this);'之前,在'gmap'函數中使用'$ self.gmap(...'。 – tvanfosson