2009-07-09 217 views
4

在AS3中,如果我添加相同的事件偵聽器的對象,examle重複事件偵聽器的數量?

txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 
txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 

我需要刪除該偵聽器兩次嗎?

如何獲取對象上的事件偵聽器的列表或數量?

+0

1)是的,2)我認爲你不能。我很想知道這是否可能,但我的理解是確切的數字是「隱藏的」。 – 2009-07-09 23:47:14

+1

好吧,我站好了。對於如何確定有多少聽衆正在「傾聽」,我仍然很好奇(因爲我確定你是)。 – 2009-07-10 01:07:09

回答

7

不,你不需要在這種情況下兩次刪除偵聽。

您需要刪除在兩種情況下多聽衆:

  1. 如果添加兩個事件偵聽器具有不同的監聽功能:
 

    txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 
    txtField.addEventlistener(Event.CHANGE, changeCb2, false, 0, true); 

  • 如果您在捕捉階段設置了一個要觸發的事件:
  •  
    
        txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 
        txtField.addEventlistener(Event.CHANGE, changeCb, true, 0, true); 
    
    

    所以你只需要刪除以不同方式註冊的事件。

    Flex無法獲得事件偵聽器的計數,但您可以使用hasEventListener(type)來檢查是否具有特定類型事件的事件偵聽器。

    但是,由於源代碼(如果提供),您可以使用「Monkey patch」UIComponent或FlexSprite類來添加此功能,如this blog中所述。其實,你甚至不需要這樣做。代碼在示例中提供。很酷。