我想做的是与此类似的事情(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!");
});
但它不起作用......
所以我的问题是,我如何为多边形添加一个监听器?
答案 0 :(得分: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!");
});
}
}
应该可以正常工作。
答案 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!");
});
}
}