0

我想做的是与此类似的事情(如何使用 Gmap4rails 设置缩放级别
,但不是:

google.maps.event.addListenerOnce(Gmaps.map.getMapObject(), 'idle', function(){}

我想要类似的东西

google.maps.event.addListenerOnce(polygon, 'click', function(){}  

_
所以我试着做一个实验:

handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
      polygon = handler.addPolygons(<%= raw @myhash.to_json %>);
}
google.maps.event.addListener(polygon, "click", function( evt ) {
      alert("hello!");
});

但它不起作用....

所以我的问题是,如何为 Polygons 添加一个监听器?

4

2 回答 2

1

文档说google.maps.event.addListener并且google.maps.event.addListenerOnce只接受一个对象作为他们的第一个参数,所以数组markers可能不起作用。您需要addListener为每个标记调用一次。大致是这样的:

handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
    markers = handler.addMarkers(<%= raw @myhash.to_json %>);

    for (marker in markers) {
        google.maps.event.addListener(marker, "click", function( evt ) {
            alert("hello!");
        });
    }
}

应该可以正常工作。

于 2013-12-10T05:42:01.287 回答
0

这是一个变量范围的问题,真正的 google 对象存在于 gmaps4rails 代理对象中:

handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
  var polygons = handler.addPolygons(<%= raw @myhash.to_json %>);

  for (var i=0;i < polygons.length; i++){
    var polygon = polygons[i];
    google.maps.event.addListener(polygon.getServiceObject(), "click", function(evt) {
      alert("hello!");
    });
  }
}
于 2013-12-12T17:57:56.087 回答