我有一个JSON对象infoCentros
这是我用来构造图,如下所示:标记click事件总是打开到最后推信息窗口
for (var i = 0; i < infoCentros.length; i++) {
var centro = infoCentros[i];
var lat = centro.cordenadas.lat;
var lon = centro.cordenadas.long;
if (lat && lon) {
c++;
latlon = new google.maps.LatLng(lat, lon);
var moptions = {
position: latlon,
map: $project.gmap
}
moptions.icon = theme_uri + '/images/marker.png';
var marker = new google.maps.Marker(moptions);
$project.mapMarkers.push(marker);
google.maps.event.addListener(marker, 'click', function() {
$project.mapInfoWindow.setContent(
'<div class="sescam-info-window">' +
'<h3>' + centro.nombre + '</h3>' +
'<p>' + centro.lugar + '</h3>' +
'<p>Coordinador</p>' +
'<p>' + centro.coordinador.nombre + '</p>' +
'<p>' + centro.coordinador.email + '</p>' +
'<p>Responsable</p>' +
'<p>' + centro.responsable.nombre + '</p>' +
'<p>' + centro.responsable.email + '</p>'
+ '</div>'
);
$project.mapInfoWindow.open($project.gmap, marker);
});
$project.mapBounds.extend(latlon);
}
}
它似乎做工精细,但如果我有5个标记,无论我点击哪一个,infowindow总是对应最后一项(位置和内容),
任何想法我错过了什么?我认为通过到addListener会做的伎俩..
你需要使用闭包分配内容到infowindow在你的事件监听器中,请参阅https://developers.google.com/maps/documentation/javascript/examples/event-closure – duncan 2014-10-27 11:59:03
@duncan我不明白,你的意思是使用它? 'infowindow.open(marker.get('map'),marker);' – 2014-10-27 12:08:26
不,您对'google.maps.event.addListener'的调用应该使用外部函数而不是匿名内联函数。 – duncan 2014-10-27 14:34:50