Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.07.2011, 21:12
ZGG вне форума Посмотреть профиль Отправить личное сообщение для ZGG Найти все сообщения от ZGG
  № 1  
Ответить с цитированием
ZGG
 
Аватар для ZGG

Регистрация: Nov 2005
Адрес: 26°58′49.06″ 49°24′35.72″ Ymaps
Сообщений: 119
Отправить сообщение для ZGG с помощью ICQ Отправить сообщение для ZGG с помощью Skype™
Question Передача Event вверх по иерархии, потеря свойств.

Здравствуйте!
Помогите разобраться начинающему кодеру.

Есть главный класс Main:
Код AS3:
package
{
	import flash.display.*;
 
	public class Main extends Sprite
	{
		public function Main():void
		{
			var a:A = new A()
			a.addEventListener(SimpleEvent.MY_TYPE, onSimpleEvent)
			a.askForEvent()
		}
 
		private function onSimpleEvent(e:SimpleEvent):void 
		{
			trace(e.someVar)
		}
	}
}
Класс A:
Код AS3:
package
{
	import flash.events.EventDispatcher;
 
	public class A extends EventDispatcher
	{
		private var b:B;
 
		public function A()
		{
			super()
			b = new B()
			b.addEventListener(SimpleEvent.MY_TYPE, onSimpleEvent)
		}
		public function askForEvent():void
		{
			b.doEvent()
		}
		private function onSimpleEvent(e:SimpleEvent):void
		{
			dispatchEvent(e)
		}
	}
}
Класс B:
Код AS3:
package
{
	import flash.events.EventDispatcher;
 
	public class B extends EventDispatcher
	{
		public function B()
		{
			super()
		}
		public function doEvent():void
		{
			var event:SimpleEvent = new SimpleEvent(SimpleEvent.MY_TYPE)
			event.someVar = "hello!";
			dispatchEvent(event)
		}
	}
}
Ну и собственно сам SimpleEvent:
Код AS3:
package  
{
	import flash.events.Event;
 
	public class SimpleEvent extends Event 
	{
		public static const MY_TYPE:String = "my_type"		
		private var _someVar:String
 
		public function SimpleEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
		{ 
			super(type, bubbles, cancelable);			
		} 		
		public override function clone():Event 
		{ 
			return new SimpleEvent(type, bubbles, cancelable);
		} 		
		public override function toString():String 
		{ 
			return formatToString("SimpleEvent", "type", "bubbles", "cancelable", "eventPhase"); 
		}		
		public function get someVar():String 
		{
			return _someVar;
		}		
		public function set someVar(value:String):void 
		{
			_someVar = value;
		}		
	}
}
Обясните пожалуйста, почему обработчик событий onSimpleEvent в главном классе выводить null, а не "hello!" ? Неужели мне для баблинга события надо создавать новый экземпляр SimpleEvent в обработчике onSimpleEvent класса B и его свойству someVar присваивать свойство someVar уже отдиспатченного события?

типа так:
Код AS3:
package
{
	import flash.events.EventDispatcher;
 
	public class A extends EventDispatcher
	{
		private var b:B;
 
		public function A()
		{
			super()
			b = new B()
			b.addEventListener(SimpleEvent.MY_TYPE, onSimpleEvent)
		}
		public function askForEvent():void
		{
			b.doEvent()
		}
		private function onSimpleEvent(e:SimpleEvent):void
		{
			var event:SimpleEvent = new SimpleEvent(SimpleEvent.MY_TYPE)
			event.someVar=e.someVar			
			dispatchEvent(event)
		}
	}
}
__________________
ЛОГИКА - залог программирования!

Старый 16.07.2011, 21:16
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну а где в clone() копирование _someVar?

Старый 16.07.2011, 21:37
ZGG вне форума Посмотреть профиль Отправить личное сообщение для ZGG Найти все сообщения от ZGG
  № 3  
Ответить с цитированием
ZGG
 
Аватар для ZGG

Регистрация: Nov 2005
Адрес: 26°58′49.06″ 49°24′35.72″ Ymaps
Сообщений: 119
Отправить сообщение для ZGG с помощью ICQ Отправить сообщение для ZGG с помощью Skype™
etc, спасибо большое.

Но тогда получается все свойства SimpleEvent нужно передавать в его же конструкторе? Только так? А если у меня там этих свойств куча-кучище? Неудобно как то получается. ((
__________________
ЛОГИКА - залог программирования!

Старый 16.07.2011, 22:08
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
куча-кучище? Неудобно как то получается. ((
Чейто vars:* or ...rest
__________________
Марк Tween

Старый 17.07.2011, 00:38
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 5  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Но тогда получается все свойства SimpleEvent нужно передавать в его же конструкторе? Только так? А если у меня там этих свойств куча-кучище? Неудобно как то получается. ((
Проблема высосана из пальца. Честно.
Код AS3:
public override function clone():Event 
{ 
	var e:SimpleEvent = new SimpleEvent(type, bubbles, cancelable);
	e._someVar = this._someVar;
 
	return e;
}
©«Was that so hard?»

Старый 17.07.2011, 12:34
ZGG вне форума Посмотреть профиль Отправить личное сообщение для ZGG Найти все сообщения от ZGG
  № 6  
Ответить с цитированием
ZGG
 
Аватар для ZGG

Регистрация: Nov 2005
Адрес: 26°58′49.06″ 49°24′35.72″ Ymaps
Сообщений: 119
Отправить сообщение для ZGG с помощью ICQ Отправить сообщение для ZGG с помощью Skype™
i.o. , спасибо большое.
__________________
ЛОГИКА - залог программирования!

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:46.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.