Mi duda es la siguiente. Estoy creando una clase en AS3 llamada LoaderXML, que además de hacer de Loader -propiamente dicho- también va a permitir hacer búsquedas usando E4X.
Mi problema es el siguiente. Desde el main yo quiero instanciar mi clase y en la siguiente instrucción hacer una búsqueda. Esta búsqueda la quiero hacer desde una función miembro de la clase LoaderXML. Esa última da error ya que no da tiempo a cargar el XML. Evidentemente yo he añadido un evento COMPLETE para saber que he terminado de cargar el archivo, pero como la llamada es asíncrona me da igual. El problema es conceptual, pero aún asi os pego el código:
La clase:
package com.voragine
{
import flash.xml.*;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.EventDispatcher;
public class LoaderXML extends EventDispatcher
{
public var myXML:XML;
public var myLoader:URLLoader;
private var myRequester:URLRequest;
private var conDatos:Boolean = false;
public static var porcentaje:int = 0;
public function LoaderXML(pFile:String):void
{
myLoader = new URLLoader();
myRequester = new URLRequest(pFile);
myLoader.addEventListener(Event.COMPLETE, estaCargado);
myLoader.addEventListener(ProgressEvent.PROGRESS, progreso);
myLoader.load(myRequester);
}
// Getters
public function tengoDatos():Boolean
{
return conDatos;
}
private function estaCargado(evento:Event):Boolean
{
var auxLoader:URLLoader = evento.target as URLLoader;
if (auxLoader != null)
{
myXML = new XML(myLoader.data);
myXML.ignoreWhitespace = true;
conDatos = true;
dispatchEvent(new Event(Event.CHANGE));
return true;
}
return false;
}
private function progreso(event:ProgressEvent):void
{
LoaderXML.porcentaje = int((event.bytesLoaded/event.bytesTotal)*100);
}
public function cuantoProgreso():int
{
return porcentaje;
}
public function getInfo(pNodo:String, pIndex:Number):void
{
if (conDatos)
trace(myXML.toXMLString());
else
trace("No tengo datos");
}
}
}
Desde el main:
var loader : LoaderXML = new LoaderXML("xml/creatividades.xml");
loader.getInfo("",0); // evidentemente esto es una prueba
¿Alguien puede echarme un cable?
Muchas gracias y un saludo.
