如何在DrawingManagerControl的按钮上添加事件监听器?

时间:2013-10-03 13:24:01

标签: javascript jquery google-maps

我想在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);
      }
   }
});

1 个答案:

答案 0 :(得分:2)

没有实现的方法来访问这些控件。你有两个选择:

  1. 观察DrawingManager实例的drawingmode_changed - 事件。当drawingmode设置为google.maps.drawing.POLYGON时,将其设置为null(将无法再绘制多边形)

  2. 更新drawingManager.drawingControlOptions.drawingModes。将其设置为包含除google.maps.drawing.POLYGON之外的所有叠加类型的数组(这将删除POLYGON控件)。此处还将drawingmode设置为null


  3. 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';