![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Опять наверно всех шокирую свое глупостью но:
есть скажем класс Main в который я импортирую 100500 других классов один из которых например XML парсер и вызываю например так: var XMLobj = new XMLparser(какой-то.xml) в классе XMLpaser происходит собственно много вещей таких как обработчик событий лоадера, аттач прелоадера и т.д. тоесть происходит процесс - не мгновенный вопросы в следующем: 1) XMLobj равен null 2) как сделать ретурн только нужного из результата парсинга, например return XMLdata.тег_такойто:toXLSList и присвоить его XMLobj.имя_тега_такогото 3) как перехватить событие когда XMLobj примет значение функции XMLpaser (через ентерфремй и обновлять 50 раз в секунду думаю не эффективно) чтобы можно мыло спокойно работать с результатами парсинга в главном классе? 4) как вообще сделать ретурн из класса??? Наглядно: // тут главный класс package { import XMLparser public class Main { public var XMLobj:XLList public function Main() { XMLobj = new XMLparser(какой-то.xml) // когда заполнится XMLobj и не будет равен null // например trace(XMLobj) }}} //тут парсер XML package { public class XMLparser { public var dataXML:XMLList public function XMLparser(url) { //бла бла бла loader.addEventListener(Event.COMPLETE,complHandler); } public function complHandler(event:Event) { dataXML = XML(event.target.data); // вот я получил dataXML в котором находится весь мой XML пусть даже как XMLList // как теперь мне присвоить XMLobj из класса Main листинг dataXML из этого класса? // что-то типа return dataXML // и например добавить метод к XMLobj.только_теги_TEG1 который будет хранить данныйе из dataXML.только_теги_TEG1? }}} ![]() Последний раз редактировалось vave; 15.03.2011 в 05:35. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вам бы книжку почитать - глядишь, и "шокировать" никого не придется.
То что Вам нужно называется "события" и "слушатель событий" Доступно - в хелпе: Event, EventDispatcher, addEventListener(), dispatchEvent(). Вкратце - Мейн подписывается на событие типа COMPLETE от класса XMLparser, прежде чем отдать ему ссылку на xml в обработку. XMLparser, загрузив и разобрав xml, посылает событие, которого ожидает Мейн, то есть говорит Мейну: "Готово". После чего Мейн может забрать данные у XMLparser, если они хранятся в известном классу Мейн свойстве, либо данные могут переданы вместе с событием. Цитата:
Точно так же, как Вы "присвоили" XMLparser'у данные, загруженные лоадером - тоже другим классом.
__________________
Reality.getBounds(this); |
|
|||||
|
да, спс, но если в классе XMLparser происходит куча всего как отдать только определенные данные?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Cохранить их в то самое свойство, которое будет "забирать" Мейн (напр. data), прежде чем отправлять событие, что все готово.
__________________
Reality.getBounds(this); |
|
|||||
|
прошу прощения за наглость а можно на простейшем примере синтаксис?
|
|
|||||
// Главный класс package { import flash.display.Sprite; import flash.events.Event; public class TestProject extends Sprite { private var subClassObject:SubClass; public function TestProject():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); subClassObject = new SubClass(); subClassObject.addEventListener(Event.COMPLETE, completeHandler); subClassObject.init("12345"); } private function completeHandler(event:Event):void { trace(typeof subClassObject.data); trace(subClassObject.data); } } } // Второстепенный класс package { import flash.events.EventDispatcher; import flash.events.Event; public class SubClass extends EventDispatcher { public var data:int; public function SubClass() { } public function init(someString:String):void { data = parseInt(someString); dispatchEvent(new Event(Event.COMPLETE)); } } } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
<?xml version="1.0" encoding="utf-8" ?> <data> <image url="images/image1.jpg"/> <image url="images/photo15.jpg"/> <image url="images/mom.jpg"/> <image url="images/who_are_you.jpg"/> <image url="images/wtf12_1457351.jpg"/> <image url="images/tank101.jpg"/> <image url="images/milkigirl.jpg"/> </data> package { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.utils.ByteArray; public class XMLLoader extends EventDispatcher { private var _loader:URLLoader; private var _list:XMLList; public function XMLLoader() { } public function load(url:String):void { _loader = new URLLoader(); _loader.dataFormat = URLLoaderDataFormat.TEXT; _loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); _loader.addEventListener(Event.COMPLETE, onLoadComplete); _loader.load(new URLRequest(url)); } private function onLoadError(event:IOErrorEvent):void { trace("Ошибка загрузки XML : " + event.text); } private function onLoadComplete(event:Event):void { var xml:XML = XML(event.target.data); _list = xml..image.@url; dispatchEvent(new Event(Event.COMPLETE)); } public function get list():XMLList { return _list; } } } package { import flash.display.Sprite; import flash.events.Event; import flash.display.StageAlign; import flash.display.StageScaleMode; public class Main extends Sprite { private var _imagesList:XMLList; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point var listLoader:XMLLoader = new XMLLoader(); listLoader.addEventListener(Event.COMPLETE, onImageListComplete); listLoader.load("images.xml"); } private function onImageListComplete(event:Event):void { var loader:XMLLoader = event.target as XMLLoader; _imagesList = loader.list; trace(_imagesList.toXMLString()) } } }
__________________
Reality.getBounds(this); |
|
|||||
|
омг - спс за простой пример
жалко тут раздачу пива не организовать ![]() назрел вопрос, непривычный синтаксис чтения атрибутов: xml..image.@url; .. две точки это пропуск корневого тега? @ это указатель на атрибут? Последний раз редактировалось vave; 16.03.2011 в 00:26. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:37. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|