PD:

I forgot to actually remove the eventListenerData from the list in the
unregisterEventListener method of the Bookkeeper class. Looping backwards
and adding _eventsList.splice(i, 1); should do it.


Cheers
Juan Pablo Califano



2008/7/20, Juan Pablo Califano <[EMAIL PROTECTED]>:
>
> Hi,
>
> You could try to do your own bookkeeping, so you know what listeners are
> registered to an EventDispatcher object. You can have one class to hold that
> info in a list and write a method that loops through that list and remove
> all registered listeners. You'd still have to override the addEventListener
> and removeEventListener methods in the dispatcher object, to intercept those
> calls from external code and keep your bookkeeper in sync.
>
> Some code to illustrate it (keep mind that even though it compiles, this is
> untested and may be not the best idea).
>
> package
> {
>  import flash.display.Sprite;
>
>  public class Main extends Sprite
>  {
>   private var _evtBookKeeper:EventBookkeeper;
>
>   public function Main():void
>   {
>    _evtBookKeeper = new EventBookkeeper(this);
>   }
>
>   override public function addEventListener(type:String, listener:Function,
> useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean =
> false):void
>   {
>    super.addEventListener(type, listener, useCapture, priority,
> useWeakReference);
>    _evtBookKeeper.registerEventListener(type, listener, useCapture);
>   }
>
>   override public function removeEventListener(type:String,
> listener:Function, useCapture:Boolean = false):void
>   {
>    super.removeEventListener(type, listener, useCapture);
>    _evtBookKeeper.unregisterEventListener(type, listener, useCapture);
>   }
>
>   public function removeAllListeners():void {
>    _evtBookKeeper.unregisterAndRemoveAll();
>   }
>
>  }
> }
>
> //
> //
> //
>
> package
> {
>  import flash.events.IEventDispatcher;
>  import flash.utils.Dictionary;
>
>  public class EventBookkeeper
>  {
>
>   private var _eventsList:Array;
>   private var _dispatcher:IEventDispatcher;
>
>   public function EventBookkeeper(dispatcher:IEventDispatcher) {
>    _eventsList = [];
>   }
>
>   public function registerEventListener(type:String, listener:Function,
> useCapture:Boolean):void {
>    _eventsList.push(new EventListenerData(type,listener,useCapture));
>   }
>
>   public function unregisterEventListener(type:String, listener:Function,
> useCapture:Boolean):void {
>    var len:int = _eventsList.length;
>    var i:int = 0;
>
>    var cur:EventListenerData;
>
>    while (i < len) {
>     cur = _eventsList[i] as EventListenerData;
>     if (cur.type == type && cur.listener == listener && cur.useCapture ==
> useCapture) {
>      _dispatcher.removeEventListener(type, listener, useCapture);
>     }
>     i++;
>    }
>   }
>
>   public function unregisterAndRemoveAll():void {
>    var len:int = _eventsList.length;
>    var i:int = 0;
>
>    var cur:EventListenerData;
>
>    while (i < len) {
>     cur = _eventsList[i] as EventListenerData;
>     _dispatcher.removeEventListener(cur.type, cur.listener,
> cur.useCapture);
>     i++;
>    }
>
>    _eventsList = [];
>
>   }
>  }
>
> }
>
> //
> //
> //
>
> package
> {
>
>  public class EventListenerData
>  {
>
>   public var type:String;
>   public var listener:Function;
>   public var useCapture:Boolean;
>
>   public function
> EventListenerData(type:String,listener:Function,useCapture:Boolean) {
>    this.type   = type;
>    this.listener  = listener;
>    this.useCapture = useCapture;
>   }
>
>  }
>
> }
>
>
> 2008/7/18, Fabio Pinatti <[EMAIL PROTECTED]>:
>>
>> Hi list,
>>
>> I'm wondering if I can have a generical function, that I can remove all
>> listeners registered for an object. Imagine a button with 10 listeners,
>> and
>> I don`t need know which ones it are to remove. I simply call
>> "removeListeners(dpo)" and that function does all work.
>>
>> Is there any way?
>>
>> Thanks so much,
>>
>> --
>> Fábio Pinatti
>> :: web.developer
>> :::: www.pinatti.com.br
>> :::::: 19. 9184.3745 / 3342.1130
>> _______________________________________________
>> Flashcoders mailing list
>> [email protected]
>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>>
>
>
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to