Показать сообщение отдельно
Старый 17.10.2009, 17:37
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 5  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
bjd, лови.
Например, вот так:
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Example extends Sprite
	{
		//массив со списком слушателей
		private var arr:Array = new Array();
 
		function Example():void
		{
			addEventListener(Event.ADDED_TO_STAGE, addedToStage);
		}
 
		// переписываем оригинальную функцию
		public override function addEventListener(type:String, listener:Function,
		useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
		{
			super.addEventListener(type, listener, useCapture, priority, useWeakReference); //вызываем оригинальную (не override) функцию
			arr.push([type, listener]); //обновляем массив arr новым слушателем
		}
 
		public override function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
		{
			super.removeEventListener(type, listener, useCapture); //вызываем оригинальную (не override) функцию
 
			var arr:Array = this.arr; //создаем локальную ссылку на массив, чтобы ускорить код в этой функции
			var len:int = arr.length;
 
			// проходимся по массиву от конца к началу, дабы удаление элементов не повлияло на актуальность операций
			for (var i:int = len-1; i >= 0; i--)
			{
				if (type === arr[i][0]) //если удаляемый тип слушателя найден...
				{
					arr.splice(i, 1); // удаляем весь элемент-массив (т.е. тип_слушателя_+_ссылка_на_функцию)
				}
			}
		}
 
		private function addedToStage(e:Event):void
		{
			addEventListener(Event.REMOVED_FROM_STAGE, removeListeners);
			removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
		}
 
		private function removeListeners(e:Event):void
		{
			removeEventListener(Event.REMOVED_FROM_STAGE, removeListeners);
 
			var arr:Array = this.arr; //создаем локальную ссылку на массив, чтобы ускорить код в этой функции
			var len:int = arr.length;
 
			//Проходимся по всему списку массива сло слушателя и ВСЕХ их удаляем.
			for (var i:int = len-1; i >= 0; i--)
			{
				removeEventListener(arr[i][0], arr[i][1]);
			}
 
			addEventListener(Event.ADDED_TO_STAGE, addedToStage);
 
			while (this.numChildren > 0) // если у объекта есть дети, удаляем их
			{
				removeChildAt(0);
			}
		}
    }
}