Comunidad de diseño web y desarrollo en internet online

Eventos y XML

Citar            
MensajeEscrito el 20 Dic 2007 11:54 pm
Buenas a todos.

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.

Por Belg

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Ene 2008 03:08 pm
La busqueda la tienes que hacer en el evento COMPLETE forzozamente, no la debes hacer despues de instanciar tu clase (por lo que dices, que aun no se ha cargado el XML).

Por gabynufe

Claber

446 de clabLevel



 

México, D.F.

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.