有沒有辦法確定哪些事件監聽器用顯示對象註冊?我想從顯示對象中刪除所有事件偵聽器,以便我可以根據應用程序中的上下文更改分配新事件偵聽器。如何從顯示對象中刪除所有事件偵聽器?
回答
jeceuyper是正確的...
側沒有,但:DisplayObject
擴展EventDispatcher
,它已經確實實現IEventDispatcher
...所以更準確地說:你需要重寫addEventListener
和removeEventListener
跟蹤偵聽器...
一些技術細節:我建議你使用Dictionary
來存儲處理函數...有點慢插入,但要快得多去除...還,Dictionary
支持弱引用,這是相當重要的在處理事件的情況下......也請記住,那useCapture
允許添加同一個處理器的兩倍......
好運氣,然後...;)
感謝您指出back2dos! – jdecuyper 2009-09-21 13:31:46
Glenn是對的,沒有removeAllListener或listAllListener方法。不過,你可以讓你的custum diplayObject實現接口並跟蹤所有添加或從你的對象中刪除的監聽器。
back2dos提到你應該使用的方法,我所做的是擴展MovieClip類並實現各種功能我每天都在使用,但不屬於動畫片段課程的一部分。包括覆蓋了的addEventListener類
protected var listeners : Dictionary = new Dictionary();
override public function addEventListener(type : String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = true) : void
{
var key : Object = {type:type,useCapture:useCapture};
if(listeners[ key ]) {
removeEventListener(type, listeners[ key ], useCapture);
listeners[ key ] = null;
}
listeners[ key ] = listener;
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
protected function removeListeners() : void
{
try
{
for (var key:Object in listeners) {
removeEventListener(key.type, listeners[ key ], key.useCapture);
listeners[ key ] = null;
}
}catch(e:Error){}
}
...除了整合型進鍵,但不包含函數指針意味着你只能在對象上給定類型的一個聽衆。要允許多個偵聽器,可以將偵聽器函數指針添加到鍵對象,並將該鍵設置爲某個虛擬值(例如1)。 – 2012-09-16 12:16:34
這有點一個黑客攻擊的,但在一些(也許是大多數情況下),你可以輕鬆地設置顯示對象爲null,重新初始化,然後重新配置它零視覺中斷。
這有助於刪除所有事件偵聽器。
除非你是在已經有數百位聽衆和對象就應該完全正常工作,只要你能容忍重新配置顯示對象的應用程序這樣做。
很顯然,你不應該這樣做的任何事情是做一些像加載數據構造瘋了。
function a(){
mc.addEventListener(Event.ENTER_FRAME,function(){
...
}
}
function b(){
mc.removeEventListener(Event.ENTER_FRAME,function(){});
}
作品...
- 1. 刪除DOM對象上的所有事件偵聽器
- 2. .NET - 從對象中刪除所有偵聽器事件處理程序
- 3. 如何刪除EaselJS對象中的事件偵聽器
- 4. 如何刪除NodeJS EventEmitter中的所有事件偵聽器?
- 5. 如何在AS3中一次刪除所有事件偵聽器
- 6. 如何刪除事件偵聽器?
- 7. 如何刪除事件偵聽器?
- 8. 如何從特定的加載文件中刪除所有事件偵聽器?
- 9. 如何從匿名組件中刪除事件偵聽器?
- 10. 刪除Flex中的所有事件偵聽器
- 11. JQuery - 刪除元素中的所有事件偵聽器
- 12. 刪除對象的所有引用將刪除該對象內的事件偵聽器?
- 13. 如何從DOM元素中刪除事件偵聽器?
- 14. 應該刪除HTTPService()對象的匿名事件偵聽器嗎?
- 15. 刪除骨幹視圖的所有事件偵聽器
- 16. 刪除特定類型的所有事件偵聽器
- 17. ActionScript中,對象和事件偵聽器
- 18. Chrome刪除事件偵聽器?
- 19. gmap3刪除事件偵聽器
- 20. 的NodeJS刪除事件偵聽器
- 21. Hammer.js不能刪除事件偵聽器
- 22. 刪除新庫的事件偵聽器
- 23. 刪除重複的事件偵聽器
- 24. 刪除事件偵聽器3
- 25. 刪除Dojo dGrid的事件偵聽器
- 26. 如何從父級刪除jQuery事件偵聽器而不刪除相似的偵聽器?
- 27. 事件不會從AS3中的偵聽器中刪除
- 28. 如何在此函數中正確刪除事件偵聽器
- 29. 如何使用偵聽器/偵聽器捕獲所有動作事件
- 30. 從視圖中刪除所有偵聽器android
基本上這一個愚弄的人,記錄今天早些時候:http://stackoverflow.com/questions/1452539/flash-as3-eventdispatcher-any-way-of-getting已註冊的聽衆列表 – Glenn 2009-09-21 03:20:08
但是最簡單的答案是你必須使用散列圖或其他東西來管理你自己的。 – Glenn 2009-09-21 03:20:43