![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2009
Сообщений: 5
|
Доброго времени суток.
Совсем уже отчаялся и решил-таки спросить. Задача сводится к стандартной загрузке XML документа. Итак дано: есть два класса loadData и createObj loadData - клас осуществляющий загрузку XML. Код привожу в кратце: var loadXMLdata:XML; var loader:URLLoader = new URLLoader(new URLRequest("xml.xml")); loader.addEventListener(Event.COMPLETE, getDataXML); function getDataXML(e:Event):void { loadXMLdata = XML(e.target.data); } в принципе с задачей в плане кода я справился как мне кажется, но наткнулся на проблему которая уже имела место быть на форуме, но ответа я так и не нашел. А именно - когда я обращаюсь как угодно к loadData толи через создание экземпляра, толи через прямое обращение к функции - я просто не успеваю загрузить данные в переменную.Ну и формирование экземпляра createObj соответсвенно летит в тар-тарары. Как притормозить выполнение кода я так и не придумал. Так вот в чем вопрос. Такой вариант реализации вообще имеет право на существование? Если нет то какие есть варианты? Для меня критично именно продолжение кода уже с загруженными данными. Затормозить ожиданием функции тоже нельзя, т.к. конструктор свои дела закрывает и все значения у меня null. Ну всем кто уделит мне пару строк за ранее спасибо ![]() |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 17
|
Я правильно понял что loadData ты используешь следующим образом
Если так , то ты разумеется не дожидаешься загрузки. createObj должен юзать loadData, только когда она ему просигналит ![]() (т.е. подписавшись на событие), а событие должно генерироваться loadData сразу после строчки loadXMLdata = XML(e.target.data); Если не правильно понял - напиши подробнее код.
__________________
http://www.*********** |
|
|||||
|
А что мешает после получения в классе loadData сгенерировать событие, подписаться на него там где это необходимо и после вызова события сгенерированного в loadData создать экзепляр createObj на основе данных в loadXMLdata? Все что для этого надо почитать в хелпе про класс EventDispatcher и его метод dispatchEvent()
|
|
|||||
|
Регистрация: Sep 2009
Сообщений: 17
|
Ну так я за то и агитирую
![]()
__________________
http://www.*********** |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 65
|
1)
function getDataXML(e:Event):void { loadXMLdata = XML(e.target.data); //а вот тут нельзя создать экземпляр createObj? } Можно прямо в createObj загружать xml, но технология там будет такая же: "событие окончания загрузки->всё остальное". 3) Можно перед вызовом конструктора createObj проверять, завершилась ли загрузка, и если нет не создавать createObj (если его создание не критично или пользователь может самостоятельно генерировать попытки его создания. например по нажатию на кнопку). 4) не уверен, что получится, но можно попробовать написать супер-корявый код: сделать бесконечный цикл, выходом из которого будет событие окончания загрузки. (допустим, в цикле можно проверять переменную, которая после окончания загрузки меняется на то значение, которое удовлетворяет выходу из бесконечного цикла). Но даже если это и заработает, тут есть подводные камни: защита флеша от зацикливания (по-умолчанию, там вроде 15 сек дается), ситуация, когда загрузка не происходит. Плюс ко всему, я бы постеснялся писать такое)) Последний раз редактировалось iNils; 03.09.2009 в 19:34. |
|
|||||
|
Idon, особо нет смысла мешать в кучу загрузку и обработку данных, бесконечный цикл, нажатие на кнопку не выход, это глупо, если будет долго загружаться, то юзер замучается жать кнопку, а цикл будет ограничиваться 15 секундами, да и зачем изобретать велосипед, когда элементарно можно воспользоваться пользовательскими событиями, они для того и предназначены
P.S.: в варианте 4 загрузка xml не произойдет никогда, т.к. до завершения цикла другой код выполняться не будет, в том числе и обработка загрузки xml Последний раз редактировалось amesqit; 03.09.2009 в 19:22. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 17
|
4) не сработает, даже если не постесняешься, инициализация loadXMLdata будет происходить в том же потоке который ты циклишь
__________________
http://www.*********** |
|
|||||
|
тут идет преобразование типов, можете сами попробовать:
или |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:57. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|