Foros del Web » Creando para Internet » Flash y Actionscript »

Leer XML sin urlLoader.addEventListener

Estas en el tema de Leer XML sin urlLoader.addEventListener en el foro de Flash y Actionscript en Foros del Web. Hola, trabajo con Flex, GoogleMaps y una BD Sql. Necesito crear objetos que son marcas en el mapa, para ello creo por cada marca un ...
  #1 (permalink)  
Antiguo 04/03/2009, 04:21
 
Fecha de Ingreso: febrero-2009
Mensajes: 77
Antigüedad: 15 años, 2 meses
Puntos: 0
Leer XML sin urlLoader.addEventListener

Hola, trabajo con Flex, GoogleMaps y una BD Sql.
Necesito crear objetos que son marcas en el mapa, para ello creo por cada marca un InfoWindowTabbedComponent.

Cada vez que creo un objeto, creo un InfoWindoTabbedComponent, y cada vez que creo este infow... en su código llamo a la función getData, que a su vez llama a readXML cuando even.COMPLETE==true; Es decir cuando se ha recibido todo el XML se lee, pero no justo a continuación sino que queda a la espera,el programa continúa y este paso queda relegado al final del programa.

Código:
public function InfoWindowTabbedComponent(m:Marker,id_m:int) {
    
   //  Codigo
          
    getData();
    
   //  Más código
   
}

public function getData():void {
    //Código
     urlLoader.addEventListener("complete",readXml);
}

public function readXml(event:Event):void{
        var fotosXML:XML = new XML(event.target.data);
        //Código;
}

Bien, tal y como está cuando yo creo 4 objetos Infow, se crea el InfoWindow...1, se ejecuta getData(), y NO se lanza todavía readXML, sino que queda a la espera, luego viene el InfoWindow...2, se ejecuta getData para este segundo objeto, y NO se lanza todavía readXML para este InfoWindow...2, tambien queda a la espera, y así sucesivamente hsata que se creen todos los objetos y al final es cuando se lanza readXML para el InfoWind...1, readXML para el InfoWind....2, etc.

Yo necesito que los readXML NO se lancen juntos al final, sino que cuando se cree el InfoWind...1, y ejecute getData a continuación ya se lance readXML para ese InfoWind...1, ya luego creamos InfoWind....2, se ejecuta getData para InfoWindow....2, y lanzamos readXml para InfoWind....2

¿Cómo lo hago???? Espero que ahora haya quedado más claro y fácil de entender el problema.
  #2 (permalink)  
Antiguo 04/03/2009, 21:58
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Respuesta: Leer XML sin urlLoader.addEventListener

Hola riestra!

En esta parte puedes utilizar la magia de los eventos, la clase InfoWindowTabbedComponent podemos hacer que dispare eventos extendiendo de la clase EventDispatcher, para esto debemos crear primero nuestro evento:

Código actionscript:
Ver original
  1. package
  2. {
  3.     import flash.events.Event;
  4.  
  5.     class InfoWindowTabbedComponentEvent extends Event
  6.     {
  7.         public static var ON_DATA:String = "onData";
  8.  
  9.         public function InfoWindowTabbedComponentEvent(type:String, bubbles:Boolean = false, cancelable = false) {
  10.             super(type, bubbles, cancelable);
  11.         }
  12.     }
  13. }

Para crear un objeto del tipo evento heredamos de la clase Event que está en el paquete flash.events, definimos constantes dentro de los eventos como ON_DATA para indicar la clase de evento que ha surgido, ON_DATA nos va a avisar cuando se haya recibido satisfactoriamente los datos xml, eres libre de definir las constantes que quieras.

Ahora a la clase InfoWindowTabbedComponent hacemos que herede de la clase EventDipatcher para que esta pueda lanzar eventos:

Código actionscript:
Ver original
  1. package
  2. {
  3.     import flash.events.Event;
  4.  
  5.     class InfoWindowTabbedComponent extends EventDispatcher
  6.     {
  7.         public function InfoWindowTabbedComponent(m:Marker, id_m:int) {  
  8.             getData();
  9.         }
  10.  
  11.         public function getData():void {
  12.              urlLoader.addEventListener("complete",readXml);
  13.         }
  14.  
  15.         public function readXml(event:Event):void {
  16.             //LLamamos al método dispatchEvent para lanzar el evento.            
  17.             dispatchEvent(new InfoWindowTabbedComponentEvent(InfoWindowTabbedComponentEvent.ON_DATA));
  18.             var fotosXML:XML = new XML(event.target.data);
  19.        
  20.         }
  21.     }
  22. }

De esta forma sencilla podemos hacer que nuestra clase sea capaz de diparar eventos, aquí viene implícito un patrón de diseño llamado Observador, te mando una liga por si quieres profundizar más en el tema:
http://es.wikipedia.org/wiki/Observe...e_dise%C3%B1o)


Ahora cuando creamos la instancia, podemos hacer lo siguiente:

Código actionscript:
Ver original
  1. var obj:InfoWindowTabbedComponent = new InfoWindowTabbedComponent(1, 2);
  2. obj.addEventListener(InfoWindowTabbedComponentEvent.ON_DATA, onDataReceived);
  3.  
  4. function onDataReceived(evt:InfoWindowTabbedComponentEvent):void {
  5.     //Podemos crear aquí el segundo objeto InfoWindowTabbedComponent.
  6. }

Como ves a la instancia obj le añadimos un listener para que nos notifique cuando se recibe el xml en la instancia.

Cualquier duda, estamos a la orden.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:56.