Comunidad de diseño web y desarrollo en internet online

Acceder a variables externas desde Flash CS4

Citar            
MensajeEscrito el 28 Ene 2010 03:55 pm
Hola cómo están soy nuevo en esto de as3 y tambien recien estoy empezando a usar clases y necesito acceder a unas variables que tengoen esa clase. Esas variables son datos recuperados de un xml.

Esta es la clase donde recupero los valores del xml

Código ActionScript :

package
{
   import flash.events.Event;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.net.URLLoaderDataFormat;
   
   public class Cargaxml
   {
   
      
      public function Cargaxml()
      {
         consultaXml();
      }
      
      public function consultaXml():void{
      
      var xmlRequest:URLRequest=new URLRequest("http://192.168.1.92/administracion2/servicios/xmlServicios.php");
      var xmlLoader:URLLoader=new URLLoader();
      xmlLoader.dataFormat=URLLoaderDataFormat.TEXT;
      xmlLoader.load(xmlRequest);
      xmlLoader.addEventListener(Event.COMPLETE, procesaXml);
      
      }
      
      public function procesaXml(event:Event):void{
      
      var archivoXml:XML=new XML(event.target.data);
      var idServ:int=archivoXml.nombre[0].@id;//id del servicio
      var duracionServ:int=archivoXml.nombre[0].@duracion;
      var estadoServ:int=archivoXml..estado;//estado del servicio: 1(activo) - 0(inactivo)
      
      trace(idServ);
      }

   }
}



En flash cs4 , en el primer fotograma hagolo siguiente:

Código ActionScript :

import Cargaxml;
var carga:Cargaxml=new Cargaxml();


Como resultado en la salida aparece el valor de idServ, pero l oque yo quiero es que ese valor de la variable idServ asignarsela a una nueva variable que creare en flash, esto para usarlo en un timer, espero me puedan ayudar gracias. Estoy algo perdido :shock:

Por flashadictos

3 de clabLevel



 

Peru - Lima

msie8
Citar            
MensajeEscrito el 28 Ene 2010 06:52 pm
La forma mas correcta es hacer un getter, en decir getMiVariable, y harías

var mivar:String = carga.getMiVariable()

Pero si te fijas, esta variable viene de un XML, entonces no puedes recuperarla antes de que el XML haya cargado y parseado. Para ello tienes entonces que escuchar un evento que te pase esa info ... o por lo menos que esa info está disponible. Ejemplo:

Código ActionScript :

carga.addEventListener("xmlLoaded", haceAlgo)
function haceAlgo(evt:Event):void{
   var mivar:String = carga.getMiVariable() //acá si porque sabemos que lo ha cargado
}


En la clase donte tienes el trace

Código ActionScript :

trace(idServ); 
dispatchEvent(new Event("xmlLoaded"))


Te dará error porque no extiendes de una clase que use EventDispatcher, haz por ejemplo

public class Cargaxml extends EventDispatcher {

Puff, la explicación es un poco rápida, pero tienes como para hacerte a la idea

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 28 Ene 2010 08:27 pm
Hola gracias hice lo que me dijiste , pero la parte que no comprendo es esa que dice:

carga.getMivariable();

He intentado poner esto no se si esta bien, carga.get(idServ);

Sin embargo me da error y buscando sobre getter, he encontrado pero usando en funciones con set y get, pero no para variables, bueno espero poder resolver esto :S.

Por flashadictos

3 de clabLevel



 

Peru - Lima

msie8
Citar            
MensajeEscrito el 29 Ene 2010 08:47 am
FlashAdictos, tal y como lo tienes, "idServ" es una variable temporal (definida dentro de una función), luego fuera de la función no tendrá valor.
Lo que debes hacer es que tu clase Cargaxml tenga una "propiedad"

Código ActionScript :

public class Cargaxml {
   public var idServ:int;  //<--la ponemos aquí y la hacemos pública
   public function Cargaxml() 
      { 
         consultaXml(); 
      } 
    .....
    //en tu función procesaXml
     public function procesaXml(event:Event):void{ 
       
      var archivoXml:XML=new XML(event.target.data); 
      //var idServ:int=archivoXml.nombre[0].@id;//En lugar de declarar la variable, usamos
                                                                 //la de la Clase
      idServ=archivoXml.nombre[0].@id;
      var duracionServ:int=archivoXml.nombre[0].@duracion; 
      var estadoServ:int=archivoXml..estado;//estado del servicio: 1(activo) - 0(inactivo) 
       
      trace(idServ); 
      } 
}

Así, podrás acceder a la variable idServ de tu objeto carga (sería carga.idServ)
El motivo de poder acceder a la variable idServ es porque la hemos definido como "public". Si la definiéramos como privada debemos usar un getter (sí es lo de usar funciones set)

Código ActionScript :

    privatevar _idServ:int;  //<--le he cambiado el nombre añadiéndole un "_"
                                       //cambialó en tu función procesaXML
    public function get idServ():int
   {
          return _idServ;
   }
      ......

Para acceder, pues como antes, carga.idServ -esa es la diferencia entre una función "setter" y una función normal

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ene 2010 12:43 pm
gracias Eliseo por completar la explicación.
En general, a menos que tengas un buen motivo para que no sea así, las variables de la clase siempre deben ser privadas, te evitarás problemas ... o como decía un amigo, siempre hay tiempo para hacerlas públicas ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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