2011-02-23 242 views
0

我正在實施一個地圖應用程序。它使用Google Maps API for Flash。單擊地圖時會觸發一個回調函數。此外,還有很多動態生成的多段線。多段線還有分配給它們的點擊事件監聽器。問題是當我點擊一條折線時,地圖點擊事件首先被觸發,然後折線的點擊事件被觸發。谷歌地圖折線點擊事件

我無法解決該問題。這真的很煩人。下面是分配回調到地圖的點擊事件代碼:

map = new Map(); 
map.key = GOOGLE_MAP_KEY; 
map.addEventListener(MapMouseEvent.CLICK, onMapClicked, true); 

這裏是回調函數分配給折線的Click事件代碼:

var polyline:Polyline = new Polyline(path); 
polyline.addEventListener(MapMouseEvent.CLICK, cutToEnd); 

我需要剿了「onMapClicked」功能的調用當我點擊一條折線時。只應調用「cutToEnd」方法。

感謝

回答

0
map.addEventListener(MapMouseEvent.CLICK, onMapClicked, true); 

您使用bubblingPhase這裏(第三個 「真」 參數)。這意味着,當你點擊多段線時,事件首先會到達你的地圖,因爲它正在從舞臺捕捉到你的按鈕。設置參數「false」,或者只保留2個參數(缺省情況下,useCapture爲「false」)。然後在您的多段線單擊處理程序的末尾添加event.stopPropagation()方法調用。它會讓事件停止冒泡,並且它不會「觸及」你的地圖。

UDATE:如果MapMouseEvent不起泡,您可以比較event.targetevent.currentTarget屬性。在你的多段線點擊監聽器,他們將是平等的。所以你可以添加

if(event.target != event.currentTarget) 
    return; 

在你的地圖的開始點擊監聽。

+0

感謝您的幫助。我認爲它不起作用。首先,我從所有的「addEventListener」調用中刪除了第三個參數。然後,我在「cutToEnd」方法的末尾添加了「event.stopPropagation()」。另外,我在「onMapClicked」的開頭添加了目標的比較。我正在調試它,它總是說「event.target」=「event.currentTarget」。 「onMapClicked」總是作爲第一個被調用。我錯過了什麼? – 2011-02-23 20:22:40

+1

看來,地圖和折線不在顯示列表上的父子關係中 – 2011-02-23 21:06:14