|
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
XML и отлов cобытия конца загрузки
Доброе время суток!
Прошу помочь мне в разборе XML парсинга. и так есть класс LoadConfig package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; /** * ... * @author 1 */ public class LoadConfig extends Sprite { public var xml :XML; public var loader : URLLoader; public var fileName :String = "../config.xml"; public function LoadConfig() { loader = new URLLoader(); var request : URLRequest = new URLRequest(fileName); loader.addEventListener(Event.COMPLETE, configLoadComplete); loader.load(request); } public function configLoadComplete(e:Event):void { xml = XML(loader.data); trace(xml); } public function TraceXML():void { trace(xml); } } } var config :LoadConfig = new LoadConfig(); // и пытаюсь сразу получить данные из xml config.TraceXML(); т.е. можете объяснить почему метод TraceXML выдает null? если даже вместо config.TraceXML() набрать, например trace(config.xml.params.value); выдает null.... |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Потому что еще ничего не загрузилось, это же очевидно.
На загрузку надо время, не то что в интернете, а даже в локальной системе загрузка происходит не мгновенно.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
Какой выход? Если сделать так:
обработать это событие в функиции configLoadComplete добавить а в родителе отловить это событие? Есть какие варианты? как будет более грамотно? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1. Естественно, только по событию можно определить, что загрузка произошла и с данными можно работать.
2. Более грамотно будет не заниматься ерундой и не писать класс, который только делегирует обращения к URLLoader'у. То есть, у Вас эта идея возникла скорее всего вместе с уверенностью, что Ваш класс будет возвращать данные, не загрузив их. Но этого не будет. Посмотрите на свой класс и скажите, чем он отличается от самого URLLoader, кроме того что не предоставляет всей его функциональности? Практически каждый флэшер хотя бы раз в жизни пытался написать свой XMLLoader. И я не исключение. Но смысл в этом появляется, только если Ваш класс будет делать что-то еще, то чего не делает URLLoader. Грузить коллекцию XMLек. Осуществлять перевод с WIN-1251. Создавать какой-то специфический Объект (по сути это уже не лоадер а парсер). Что можно сделать по-другому? Ну например, можно использовать не События а коллбек, то есть отдавать вашему XMLLoaderу ссылку на функцию, которую надо вызвать по окончании загрузки (хорошо бы так же давать ссылку на функцию, которую надо вызвать, если загрузка завершилась ошибкой). Но надо помнить, что коллбеки не очень кошерны в AS3, так как не дают возможности строгой типизации.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
Ну вообще я пытался написать класс, который грузит настройки и будет возвращать нужны данные в любом месте где это потребуется....
опять копаю не туда? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
))))
В смысле Вы сначала рожаете полста детишек, а потом при случае они звонят папе и спрашивают "Папа! А я негр или китаец? А сколько мне лет? А какого цвета на мне рубашка? А почему..?" Семью надо планировать. Заранее. А потом в соответствии с планом заводить детишек. Загрузили настройки и насоздавали объектов по этим настройкам. А не наоборот.
__________________
Reality.getBounds(this); |
|
|||||
В самом "лоадере"
public function configLoadComplete(e:Event):void { xml = XML(loader.data); trace(xml); dispatchEvent(new Event("complete")); // Пускаем событие что загрузка завершена } var config :LoadConfig = new LoadConfig(); // Слушаем событие , как только получим, выполнится функция xml_complite config.addEventListener("complete", xml_complete) ; function xml_complete(e:Event):void { config.TraceXML(); } PS2. Привяжите main fla класс к файлу main.as и не пишите в кадрах |
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
а вот сдесь можете по-подробнее?
|
|
|||||
Регистрация: Apr 2012
Сообщений: 70
|
Newred, спасибо за урок. и сразу возникают несколько вопросов...
в чем плюсы этого способа? Компиль где нажимать надо на FlashCS5? или в билдере? Как тоже самое сделать на FlashDevelop'е? Извиняюсь, что оффтоп вопросы |
Часовой пояс GMT +4, время: 18:07. |
|
« Предыдущая тема | Следующая тема » |
|
|