package com.almirun.common.events { import flash.events.EventDispatcher; import flash.events.IEventDispatcher; import flash.events.Event; /** * @author JoshM */ public class DisposingEventDispatcher extends EventDispatcher { private var disposableListeners:Array; public function DisposingEventDispatcher( target:IEventDispatcher = null) { super(target); disposableListeners = []; } public function addDisposableEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0):void { addEventListener(type, listener, useCapture, priority, false); disposableListeners.push( {type:type, func:listener, useCapture:useCapture } ); } override public function dispatchEvent(event:Event):Boolean { var success:Boolean = super.dispatchEvent(event); var listener:Object; while (null != (listener = disposableListeners.pop())) { trace("Removing a listener with type " + listener.type); removeEventListener(listener.type, listener.func, listener.useCapture); } return success; } } }