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

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от etc Посмотреть сообщение
Досточно public-ов. От геттеров проку нет, событие всё равно клонируется постоянно.
Цитата:
Сообщение от fljot Посмотреть сообщение
Клонируется то клонируется, но это при бабблинге или в разных обработчиках...
что-то я, видимо, не понимаю. Не замечал, чтобы событие при баблинге клонировалось. По крайней мере, в дисплейобджектах.
Если все правильно про клонирование, то как/когда это происходит при нативном всплытии события?

Вот пример того, что наблюдаю я:
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Example extends Sprite
	{
		private var _event:MyEvent;
 
		function Example() {
			super();
 
			var s1:Sprite = new Sprite();
			var s2:Sprite = new Sprite();
			var s3:Sprite = new Sprite();
 
			super.addChild(s1);
			s1.addChild(s2);
			s2.addChild(s3);
 
			s1.addEventListener(Event.CHANGE, this._test1);
			s2.addEventListener(Event.CHANGE, this._test2);
 
			s3.dispatchEvent(new MyEvent(Event.CHANGE, true));
		}
 
		private function _test1(e:MyEvent):void {
			trace(e.info); //10
			trace(this._event === e); //true
		}
 
		private function _test2(e:MyEvent):void {
			trace(e.info); //5
			e.info = 10;
			this._event = e;
		}
	}
}
Код AS3:
package  
{
	import flash.events.Event;
 
	public class MyEvent extends Event
	{
		public var info:int;
 
		function MyEvent(type:String, bubbles:Boolean = false, info:int = 5, cancelable:Boolean = false) {
			super(type, bubbles, cancelable);
 
			this.info = info;
		}
 
		// монжно раскомментить - трейсы те же.
		/*override public function clone():Event {
			return new MyEvent(super.type, super.bubbles, 20)
		}*/
	}
}