PDA

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


rain_heart
13.05.2008, 19:53
Посмотрите ниже написанный код и подскажите как его грамотно исправить.

Задача следующая: сделать клас который будет читать 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
я подозреваю что все это происходит по причине того что метод getXMLdata() обрабатывается быстрее чем loader.addEventListener(Event.COMPLETE, handleXML);
но как это побороть???
Правильно подозреваете. Лечится изменением логики приложения, в данном случае налицо ошибка проектирования. Загрузка чего-либо откуда-либо в ActionScript асинхронна, в отличие от некоторых других языков, например C#.

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

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

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