![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 43
|
есть код:
public function loadXml(pathToXML:String):void { xmlLoader.load(new URLRequest(pathToXML)); xmlLoader.addEventListener(Event.COMPLETE, xmlLoadHandler); } private function xmlLoadHandler(e:Event):void { trace(0); } public function getMedia():Object { trace(1) } Вместо ожидаемого вывода 0 1 выводится 1 0 Как решить эту проблему? |
|
|||||
|
Дык никогда не успеет
вызывать getMedia() нужно в обработчике xmlLoadHandler В данном случае, судя по приведенным строчкам, нужно просто протащить в loadXML еще колбек и вызвать этот колбек в обработчике xmlLoadHandler А уж в самом колбеке теребить getMedia(), когда данные готовы Последний раз редактировалось expl; 26.03.2010 в 23:57. |
|
|||||
public function loadXml(pathToXML:String):void { xmlLoader.load(new URLRequest(pathToXML)); xmlLoader.addEventListener(Event.COMPLETE, xmlLoadHandler); } private function xmlLoadHandler(e:Event):void { trace(0); this.getMedia(); } public function getMedia():Object { trace(1) }
__________________
Дело не в тебе |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 43
|
это все костыли. мне нужно гибкое решение, чтобы я мог вызывать не только getMedia(), а любое количество функций, добавлять их в коллбек или обработчик события не решение, так мне придется весь класс засунуть в этот обработчик.
|
|
|||||
|
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Вам привели корректное решение вашей проблемы. Если вам необходимо, то можете подписать на событие окончания загрузки не одну функцию, а сразу несколько (только не уверен, что это будет правильным решением).
Код: У вас работает абсолютно корректно и нужно понимать, что на загрузку внешнего файла необходимо какое-то время, поэтому событие окончания загрузки возникает после вызова вами функции getMedia. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 43
|
решения корректные, но мне не подходят, а если у меня будет 100 методов по типу getMedia? мне их все засунуть в обработчик xmlLoadHandler? мне просто нужно что метод loadXml ретурнился только после того как файл загружен.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
«Осторожно, двери закрываются! Следующая станция…» © Метро
Да хоть убейтесь, флеш асинхронен при загрузке данных и синхронным не будет. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
"..не подходит.." - изменяйте свой подход, только и всего. Потому что он неправильный. Для примера почему - если бы Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
listener
|
Цитата:
Чем принципиально отличаются участки кода: Class.loadXml("xml.xml");
Class.getMedia();
Class.getMedia1();
Class.getMedia2();
Class.getMedia3();
...
Class.getMediaN();
private function xmlLoadHandler(e:Event):void
{
this.getMedia();
this.getMedia1();
// еще туча getmediaN();
}
Вы себе представляете это как-то иначе? Конечно, порой хочется синхронности, но такова се ля ви. И да, пихнуть класс в обработчик - это какой-то нонсенс? Типа так: UPD Вот, а еще, говорят, модераторы плохо работают! ![]() Последний раз редактировалось alexcon314; 27.03.2010 в 14:02. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 43
|
alexcon314
участки кода отличаются негибкостью и "костылизмом", мне нужен класс который получает xml, обрабатывает, и отдает результат, тоесть Class.loadXml("xml.xml"); ...... //другие методы не этого класса, количество от 0 до бесконечности. var a:String = Class.getSomeStringFromXml("blabla"); public SomeClass { private var xmlLoader:URLLoader = new URLLoader(); public function SomeClass(xml:string) { //загружаем xml xmlLoader.load(new URLRequest(pathToXML)); xmlLoader.addEventListener(Event.COMPLETE, xmlLoadHandler); } private function xmlLoadHandler(e:Event):void { getMedia(); getMedia1(); getMedia2(); getMedia3(); getMedia4(); getMedia5(); ...... getMediaN(); } //тут идет объявление всех getMedia } Wolsh Я никогда не кодил AS3 с помощью кадров. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Основной вопрос, как синхронно вызвать обработчик события, если этого не поддерживает язык, то наверняка должен быть какой-нибудь красивый "костыль". |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:26. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|