gmaps4rails v2多边形点击事件

时间:2013-12-09 01:06:41

标签: ruby-on-rails google-maps ruby-on-rails-4 gmaps4rails gmaps4rails2

我想做的是与此类似的事情(how to set a zoom level using 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!");
});

但它不起作用......

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

2 个答案:

答案 0 :(得分:1)

文档说google.maps.event.addListenergoogle.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!");
        });
    }
}

应该可以正常工作。

答案 1 :(得分:0)

这是一个可变范围的问题,真正的谷歌对象存在于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!");
    });
  }
}