Показать сообщение отдельно
Старый 06.07.2011, 12:17
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 3  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Одно из двух - или создать класс M, который расширяет класс Event, добавляя свойство file и диспатчить его потом классом A, в котором надо назначить слушатель вашего события:
Код AS3:
class YourEvent extends Event {
 
	public var file:ByteArray;
	public static const YOUR_EVENT_TYPE:String = "yourEventType";
	public function YourEvent (...args) {//Так делать неправильно, но я не помню всех входных данных Event
		super(args[0],args[1],args[2])
	}
 
}
 
class A {
 
	public var bInstance:B = new B();
		public function A () {
			bInstance.addEventListener(YourEvent.YOUR_EVENT_TYPE,getYourFile);
			bInstance.loadThis('someUrl');
		}
 
		private function getYourFile(e:YourEvent):void {
			var loadedFile:ByteArray = e.file;
			<...>
		}
 
}
 
class B extends EventDispatcher {
 
	public function B () {
 
	}
 
	public function loadThis(url:String) {
		var loader:Loader = new Loader();
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteListener);
		loader.load(new URLRequest(url));
	}
 
	private function loadCompleteListener(e:Event):void {
		var event = new YourEvent(YoueEvent.YOUR_EVENT_TYPE);
		event.file = e.currentTarget.loader.content;
		dispatchEvent(event);
	}
 
}
Либо по загрузке файла класть его одним из свойств класса B и диспатчить "комплит" заново. В А соответственно слушать комплит и при необходимости - брать файл из свойства экземпляра B.
Код AS3:
class A {
 
	public var bInstance:B = new B();
	public function A () {
		bInstance.addEventListener(Event.COMPLETE, getYourFile);
		bInstance.loadThis('someUrl');
	}
 
	private function getYourFile(e:YourEvent):void {
		loader:B = e.currentTarget as B; // или же просто bInstance
		if (loader) {
			var loadedFile = loader.file;
			<...>
		}
	}
 
}
 
class B extends EventDispatcher {
	public var file:ByteArray;
	public function B () {
 
	}
 
	public function loadThis(url:String) {
		var loader:Loader = new Loader();
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteListener);
		loader.load(new URLRequest(url));
	}
 
	private function loadCompleteListener(e:Event):void {
		file = e.currentTarget.loader.content;
		dispatchEvent(e);
	}
 
}
Первый вариант мне больше нравится, хоть и не всегда есть смысл создавать свои события
__________________
Дебаггер не предлагать


Последний раз редактировалось BuKT; 06.07.2011 в 12:19.