2013-10-03 63 views
2

我想按Draw Polygon按鈕上的click事件。但DrawingManager API僅提供overlaycomplete事件(polygoncomplete,circaled,完成等)。我如何在這些按鈕上添加一個click事件?特別是如果一個多邊形的形狀已經在地圖上,我想禁止繪製第二個多邊形。所以我想添加一個click處理程序到Draw Polygon按鈕並返回否定響應。如何在DrawingManagerControl的按鈕上添加事件偵聽器?

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

有訪問這些控件沒有實現的方式。你有2個選項:

  1. 觀察drawingmode_changed-DrawingManager實例的事件。當drawingmode設置爲google.maps.drawing.POLYGON,將其設置爲null(它將不再可能繪製多邊形)

  2. 更新drawingManager.drawingControlOptions.drawingModes。將其設置爲包含除google.maps.drawing.POLYGON之外的所有覆蓋類型的數組(這將刪除POLYGON控件)。這裏還設置了drawingmode _changed事件的drawingmodenull


說明:

一個的DrawingManager實例是MVCObject。 MVCObjects擁有內置的屬性設置器(set()setValues())。 Maps-API使用這些設置器來設置屬性。每次使用這些方法時,都會觸發一個名稱,該名稱包含屬性名稱和字符串_changed(例如,當您通過設置人員設置weatherMVCObject時,會觸發事件weather_changed)。當您使用特定的setter函數(setZoom,setCenter,setMap等)時也會發生這種情況。

因此,您可能會認爲對於MVCObject的每個屬性,只要使用setter(適用於內置屬性和自定義屬性),_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'; 
+0

大溶液。我已經選擇了第一個,它完美的工作,就像我需要的一樣。謝謝。有點評論:API參考頁面(https://developers.google.com/maps/documentation/javascript/reference?hl)沒有'drawingmode_changed'事件。但事件仍然存在。 – Green

+0

有關未記錄事件起源的解釋見上文。 –

相關問題