2011-08-31 88 views
0

我寫這篇ActionScript代碼:removeEventListener似乎沒有刪除監聽

trace("before remove: " + 
    donneesTechniques.hasEventListener(DonneesTechniques.INITIALISATION)); 
donneesTechniques.removeEventListener(DonneesTechniques.INITIALISATION, init); 
trace("after remove: " + 
    donneesTechniques.hasEventListener(DonneesTechniques.INITIALISATION)); 

這段代碼的輸出是:

before remove: true 
after remove: true 

這怎麼可能? donneesTechniques組件具有用於INITIALISATION事件的列表程序,但它似乎不會將其刪除...

我通過代碼檢查了此組件的內存地址,它始終是相同的地址。所以沒有刪除另一個對象。 removeEventListener沒有任何效果,如果聽衆沒有找到,但在我的情況有(按hasEventListener()

+1

實際答案:停止使用as3的魔法字符串事件系統,並切換到更快的速度,並有效的as3信號。 http://johnlindquist.com/2010/01/21/as3-signals-tutorial/沒有什麼,他們提供了更多的好處,很容易跟蹤和刪除它們。 – JTtheGeek

+0

因爲我是一名實習生,對一個已經存在的(但是如此被竊聽)項目進行研究,所以我會問我的團隊是否可以互相幫助。順便說一句,非常感謝你,我會看看這個爲我的個人項目! –

+0

我跟團隊的其他成員交談過,他們信服這個信號插槽方法!非常感謝這個鏈接JTtheGeek! –

回答

1

根據hasEventListener()至少一個聽衆之一。因此,如果某個其他組件訂閱了此事件並且在您刪除當前對象中的偵聽器後仍然訂閱,那麼很可能會發生這種情況。

+0

謝謝你的快速答案!你知道我如何檢查聽衆的數量嗎? –

+1

這是非常可惜的,但沒有辦法確定:( – Constantiner

+0

哦!好吧...我會繼續我的調查,然後... 奇怪的是,有時聽衆被刪除...這可能意味着它會在首次刪除後多次添加,或者我錯了嗎? –