|
|
|||||
Регистрация: Jul 2011
Сообщений: 21
|
Сложное взаимодействие классов
Здравствуйте. Ситуация такова:
Класс А: - имеет метод С получающий URL файла в кач-ве параметра - метод С начинает загружать файл и добавляет загрузчику слушателя Д, который запускается как только файл загружен - слушатель Д парсит файл, как только он загружен Класс Б: - создает экз. класса А - вызывает метод С, передает ему УРЛ файла Вопрос: как мне в классе Б получить результат парсинга? Прошу прощение за абстрактное описание проблемы, если ничего не понятно, я попробуй переформулировать. Благодарю за помощь! Класс А: package tools{ import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.Event; public class XmlToArr { private var playlistXml:XML; private var xmlUrlRequest:URLRequest; private var xmlUrlLoader:URLLoader; public function XmlToArr (xmlUrl:String) { } public function Convert (xmlUrl:String) { this.xmlUrlRequest = new URLRequest(xmlUrl); this.xmlUrlLoader = new URLLoader(this.xmlUrlRequest); this.xmlUrlLoader.addEventListener (Event.COMPLETE,listenerComplete); } private function listenerComplete (event:Event) { this.playlistXml = new XML(this.xmlUrlLoader); } } } Класс Б: package player{ import tools.XmlToArr; import flash.display.MovieClip; public class Playlist extends MovieClip { private var playlistUrl:XML; public var playlistArr:Array; public function Playlist (playlistUrl:String):void { var newXmlToArr:XmlToArr = new XmlToArr(playlistUrl); newXmlToArr.Convert(playlistUrl); } } } |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
В метод С передать ещё и функцию, которую вызвать по завершению и передать в неё чего хочется. Или Д по завершению парсинга диспатчит евент, на который подписывается Б.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Одно из двух - или создать класс M, который расширяет класс Event, добавляя свойство file и диспатчить его потом классом A, в котором надо назначить слушатель вашего события:
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); } } 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. |
|
|||||
Регистрация: Jul 2011
Сообщений: 21
|
Спасибо большое за ответы! Я прочел офф. справку но не понял ровным счетом ничего.... Попробую перечитать, но может кто кинется в меня статейкой, что такое диспач.
Прошу прощения, я в АС3 всего пару дней. |
|
|||||
Регистрация: May 2011
Адрес: 0,0,0 относительно меня
Сообщений: 123
|
а у них есть синхронный аналог?
|
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
Часовой пояс GMT +4, время: 11:05. |
|
« Предыдущая тема | Следующая тема » |
|
|