Показать сообщение отдельно
Старый 08.07.2009, 14:07
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 1  
Ответить с цитированием
vvvvvvf

Регистрация: Mar 2009
Сообщений: 107
По умолчанию Как получить переменную внутри функции обработчика события?

Доброго времени суток.
Столкнулся с такой проблемой, мне нужно реализовать определенное количество контейнеров (количество контейнеров получаю с сервера), и к каждому контейнеру нужно прицепить свой Timer. Чтобы реализовать это я создаю массив Timer-ов и каждый Timer в функции обработчике должен знать свой индекс.

Тут такая проблема как получить свой i в функции обработчике?
в данном коде всегда возвращается 10 и это понятно, а как сделать чтобы возвращался свой i, то есть 1, 2, 3 и т.д?

Код #1
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class myClass extends Sprite {
		private var myTimer:Array = new Array();
 
		public function myClass():void {
			for (var i:int = 0; i < 10; i++) {
				myTimer[i] = new Timer(1000);
				myTimer[i].start();
				myTimer[i].addEventListener(TimerEvent.TIMER, function (e:*) {
					trace('Как тут получить доступ к своей переменной i?');
					trace('i:'+i); // во всех 10 обработчиках, выдает 10
				});
			}
		}
	}
}
или такой более правильный код, как тут получить у каждого свой i?

Код #2
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class myClass extends Sprite {
		private var myTimer:Array = new Array();
 
		public function myClass():void {
			for (var i:int = 0; i < 10; i++) {
				myTimer[i] = new Timer(1000);
				myTimer[i].start();
				myTimer[i].addEventListener(TimerEvent.TIMER, doTime);
			}
		}
		public function doTime(e:TimerEvent):void {
			trace('Как тут получить доступ к своей переменной i?');
			trace('i:'+i); 
		}
	}
}


или вопрос можно поставить так: Как расширить экземпляр myTimer[i] и добавить в него например свойство id, чтобы выглядело так?

Код #3
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class myClass extends Sprite {
		private var myTimer:Array = new Array();
 
		public function myClass():void {
			for (var i:int = 0; i < 10; i++) {
				myTimer[i] = new Timer(1000);
				// каким-то чудесным способом мы
				// тут добовляем экземпляру
				// новое свойство id
				myTimer[i].id;
				// а тут уже присваиваем этому
				// свойству само значения переменной i
				myTimer[i].id = i;
				myTimer[i].start();
				myTimer[i].addEventListener(TimerEvent.TIMER, doTime);
			}
		}
		public function doTime(e:TimerEvent):void {
			// а в самой функции обработчеке мы уже
			// достаем это свойство id и
			// присваиваем его к переменной i
			var i:Number = e.currentTarget.id;
			trace('i:'+i); 
		}
	}
}
И еще раз повторю вопрос для тех кто ничего не понял:
Как расширить экземпляр myTimer[i] и добавить в него свойство id?