我想在Draw Polygon
按钮上捕捉click
事件。但是 DrawingManager API 只提供overlaycomplete
事件(多边形完成、圆完备等(。如何在这些按钮上添加click
事件?特别是,如果地图上已经有一个多边形形状,我想禁止绘制第二个多边形。所以我想添加一个click
处理程序到Draw Polygon
按钮并返回负面响应。
上级:
所以我做了如下:
onDrawingmode_changedListener = google.maps.event.addListener(drawingManager, 'drawingmode_changed', function(e) {
if(this.getDrawingMode() == "polygon") {
if(polygon) {
alert("You already have one polygon shape on the map. Remove it in order to draw a new one.");
this.setDrawingMode(null);
}
}
});
没有实现的方法来访问这些控件。 您有 2 个选项:
-
观察 DrawingManager 实例的
drawingmode_changed
事件。当drawingmode
设置为google.maps.drawing.POLYGON
时,将其设置为null
(将无法再绘制多边形( -
更新
drawingManager.drawingControlOptions.drawingModes
.将其设置为包含除google.maps.drawing.POLYGON
之外的所有覆盖类型的数组(这将删除多边形控件(。此处还将drawingmode
设置为null
drawingmode
_changed事件说明:
DrawingManager-instance是一个MVCObject。MVCObjects 具有内置的属性设置器(set()
和 setValues()
(。映射 API 使用这些资源库来设置属性。每次使用这些方法时,都会触发一个事件,其名称由属性名称和字符串_changed
组成(例如,当您通过 setter 设置MVCObject
的属性weather
时,将触发一个事件weather_changed
(。当您使用特定的setter-functions(setZoom,setCenter,setMap等(时,也会发生这种情况。
因此,您可以假设对于 MVCObject 的每个属性,只要使用资源库(适用于内置属性和自定义属性(,_changed
-event 就会触发,无论事件是否被记录。
例:
google.maps.event.addListener(map,'weather_changed',function(){
alert('it's '+this.get('weather'));
});
//this will fire a weather_changed-event
map.set('weather','rainy');
//this will not fire an event, because it doesn't use a setter-method
map.weather='rainy';