5 javascript ruby google-maps ruby-on-rails
这是我在html中的代码生成标记和infowindow(在轨道上使用ruby)
var marker=[]
function initMap() {
var latLng1 = new google.maps.LatLng(1.352083, 103.819836);
var myOptions = {
zoom: 12,
center: latLng1,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
for(i=0;i<gon.astatic.length;i++){
var latLng = new google.maps.LatLng(gon.astatic[i][1], gon.astatic[i][2]);
if(i<2){
marker[i] = new MarkerWithLabel({position: latLng, map: map,icon:"/assets/green_MarkerV.png" ,labelClass: "labels",labelContent: gon.astatic[i][3]});}
else
{
marker[i] = new MarkerWithLabel({position: latLng, map: map,icon:"/assets/green_MarkerN.png" ,labelClass: "labels",labelContent: gon.astatic[i][3]});
}
var iw =new google.maps.InfoWindow({content: 'HI' });
google.maps.event.addListener(marker[i],"mouseover",function(e){iw.open(map,marker[i]);})
}
Run Code Online (Sandbox Code Playgroud)
这个gon只是一些'愚蠢'的方法,我用来将数据从rails控制器上的ruby传递给javascript.
对于所有标记,infowindow都出现在角落.但是对于我的另一张地图(只有一个带infowindow的标记),它可以正常工作.
可能是我的问题是什么?为什么这个infowindow出现在错误的位置?而不是仅仅在标记之上?
编辑:
经过半天的麻烦拍摄,我觉得问题出在了
google.maps.event.addListener(marker[i],"mouseover",function(e){iw.open(map,marker[i]);})
当监听器回调时,标记内的值是i,这不是实际的数字,所以标记显示在一个角落.我觉得问题是无法将变量传递给addListener,只能放入实际的数字.如何解决这个?
for 循环内声明的函数的每个实例共享包含 value 的相同闭包i,因此所有 addListener 调用本质上都是调用,iw.open(map, undefined)因为i在迭代结束时将离开数组末尾。
有关此问题的示例解决方案,请参阅JavaScript 闭包内部循环 \xe2\x80\x93 简单实用示例,以及JavaScript 闭包如何工作以获取有关 JavaScript 中闭包的更多信息。
\n| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |