Javascript 映射标记单击目标错误标记
因此,我通过一个循环创建了几个GoogleMaps标记,并添加了ClickListener,这应该会打开相应的信息窗口。但是,每次单击标记都会打开上次添加的标记的信息窗口Javascript 映射标记单击目标错误标记,javascript,json,google-maps-api-3,google-maps-markers,typescript,Javascript,Json,Google Maps Api 3,Google Maps Markers,Typescript,因此,我通过一个循环创建了几个GoogleMaps标记,并添加了ClickListener,这应该会打开相应的信息窗口。但是,每次单击标记都会打开上次添加的标记的信息窗口 private loadMarkers():void { net.Ajax.getJson("/locations.json", (response:Location[]) => { for (var i = 0; i < response.length; i++) {
private loadMarkers():void {
net.Ajax.getJson("/locations.json", (response:Location[]) => {
for (var i = 0; i < response.length; i++) {
var location:Location = response[i];
var marker:google.maps.Marker = this.createMarker(location);
google.maps.event.addListener(marker, 'click', () => {
this.onMarkerClicked(marker);
});
}
});
}
private onMarkerClicked(marker:google.maps.Marker):void {
this.infoWindow.close();
this.infoWindow = new google.maps.InfoWindow({
content: marker.getTitle()
});
this.infoWindow.open(this.map, marker);
}
private loadMarkers():void{
net.Ajax.getJson(“/locations.json”,(响应:Location[])=>{
对于(变量i=0;i{
这个。在市场上点击(标记);
});
}
});
}
私有onMarkerClicked(marker:google.maps.marker):无效{
this.infoWindow.close();
this.infoWindow=new google.maps.infoWindow({
内容:marker.getTitle()
});
this.infoWindow.open(this.map,marker);
}
有什么想法吗?谢谢 这是一个典型的概念错误。闭包捕获变量
标记
而不是其值。由于变量范围是通过函数
确定的,所以您只有一个标记
修复:创建一个立即执行的函数(类似于typescript中的模块模式)
net.Ajax.getJson(“/locations.json)”,(响应:Location[])=>{
对于(变量i=0;i{
这个。在市场上点击(标记);
});
})();
}
});
PS:我有一个关于这个主题的视频:
net.Ajax.getJson("/locations.json", (response:Location[]) => {
for (var i = 0; i < response.length; i++) {
(function(){
var location:Location = response[i];
var marker:google.maps.Marker = this.createMarker(location);
google.maps.event.addListener(marker, 'click', () => {
this.onMarkerClicked(marker);
});
})();
}
});