我想在click
按钮上抓住Draw Polygon
个活动。但DrawingManager API仅提供overlaycomplete
个事件(polygoncomplete,circlecomplete等)。如何在这些按钮上添加click
事件?特别是如果一个多边形形状已经在地图上,我想禁止绘制第二个多边形。所以我想在click
按钮中添加Draw Polygon
处理程序并返回否定回复。
UPD:
所以我做了如下:
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);
}
}
});
答案 0 :(得分:2)
没有实现的方法来访问这些控件。你有两个选择:
观察DrawingManager实例的drawingmode_changed
- 事件。当drawingmode
设置为google.maps.drawing.POLYGON
时,将其设置为null
(将无法再绘制多边形)
更新drawingManager.drawingControlOptions.drawingModes
。将其设置为包含除google.maps.drawing.POLYGON
之外的所有叠加类型的数组(这将删除POLYGON控件)。此处还将drawingmode
设置为null
drawingmode
_已更改事件的说明:
DrawingManager实例是MVCObject。 MVCObjects有内置的属性设置器(set()
和setValues()
)。 Maps-API使用这些setter来设置属性。每次使用这些方法时,都会触发一个事件,其名称与property-name和字符串_changed
一致(例如,当您通过weather
设置属性MVCObject
时setter,事件weather_changed
将会触发)。当您使用特定的setter-functions(setZoom,setCenter,setMap等)时也会发生这种情况。
因此,您可以假设对于MVCObject的每个属性,只要将使用setter(适用于内置属性和自定义属性),_changed
- 事件将触发,无论事件是否为记录与否。
示例:
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';