Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   отдельный package для загрузки XML (http://www.flasher.ru/forum/showthread.php?t=111953)

rain_heart 13.05.2008 19:53

отдельный package для загрузки XML
 
Посмотрите ниже написанный код и подскажите как его грамотно исправить.

Задача следующая: сделать клас который будет читать XML из указанного файла и передавать его содержимое через экземпляр класса.

Код:

package rain.myxml{
        import flash.display.*
        import flash.events.*
        import flash.net.*
        import flash.utils.*
       

        public class LoadXML extends Sprite {
               
                public var _XMLRequest:String
                private var _XMLdata:XML;

               
                public function LoadXML() {
                } //end public function LoadXML
               
                public function getXMLdata():XML {
                        return _XMLdata
                }
               
                public function getXMLRequest():String {
                        return _XMLRequest
                }
               
                public function LoadFile(FileName:String):void {
                        _XMLRequest = FileName;
                        var loader:URLLoader = new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.TEXT;
                        loader.addEventListener(Event.COMPLETE, handleXML);
                        loader.load(new URLRequest (FileName));
                }//end private function loadFile
               
               
                private function handleXML(event:Event):void{
                        var GetXML:XML = new XML(event.target.data);
                        _XMLdata = GetXML;
                        trace(_XMLdata);
                       
                        //_XMLdata = <example><item Element="пример" /></example>;
                }//end private function handleComplete(event:Event)
               

        } //end public class LoadXML
}// end package rain.myxml

но при создании экземпляра, пример:
Код:

var NewLoadXML:LoadXML = new LoadXML();
NewLoadXML.LoadFile("test.xml");
trace(NewLoadXML.getXMLRequest())
trace(NewLoadXML.getXMLdata());

последний оператор trace выдает параметр null

я подозреваю что все это происходит по причине того что метод getXMLdata() обрабатывается быстрее чем loader.addEventListener(Event.COMPLETE, handleXML);
но как это побороть???

заранее спасибо за ответ.

etc 13.05.2008 20:09

Цитата:

Сообщение от rain_heart (Сообщение 738958)
я подозреваю что все это происходит по причине того что метод getXMLdata() обрабатывается быстрее чем loader.addEventListener(Event.COMPLETE, handleXML);
но как это побороть???

Правильно подозреваете. Лечится изменением логики приложения, в данном случае налицо ошибка проектирования. Загрузка чего-либо откуда-либо в ActionScript асинхронна, в отличие от некоторых других языков, например C#.

rain_heart 14.05.2008 09:51

Цитата:

Сообщение от __etc (Сообщение 738960)
Правильно подозреваете. Лечится изменением логики приложения, в данном случае налицо ошибка проектирования. Загрузка чего-либо откуда-либо в ActionScript асинхронна, в отличие от некоторых других языков, например C#.

Вот вот, все дело в асинхронности. Тогда вопрос такого плана, первое что такое прочитать полезное. И могу ли я для своего пакета назначать свои события чтоб потом их как то использовать.
Ну например для данного кода назначить событие завершения загрузки файла а потом только получение XML конструкции в переменную.

etc 14.05.2008 13:49

Я бы на вашем месте такой класс бы не писал, толку от него никакого.
Свои события вы можете создавать и рассылать.


Часовой пояс GMT +4, время: 04:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.