Comunidad de diseño web y desarrollo en internet online

AS3 return tras addEventListener

Citar            
MensajeEscrito el 01 Dic 2010 08:44 pm
Hola de nuevo:

Estoy intentando montarme una clase con un método similar al siguiente:

Código ActionScript :

      public function prueba():void
      {
            var request:URLRequest = new URLRequest("archivo.txt");
            request.method=URLRequestMethod.POST;
            var loader:URLLoader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.TEXT;
            loader.load(request);
            loader.addEventListener(Event.COMPLETE, finalizadaCarga);
         
            function finalizadaCarga(event:Event):String
            {
               return (event.target.data);
            }
      }



El objetivo es:
- Un archivo de texto (o php, o archivo xxx en general) --> Esto ok
- cargo totalmente el archivo --> Esto ok
- Devuelvo el contenido al "objeto" llamante en el proyecto flash. --> Aqui fallo en algo

Puedo devolver con un return sin problemas los resultados de variables, metodos, etc, pero cuando lo pongo con addEventListener y por consiguiente, ejecutando una funcion posterior, como puedo devolver ese valor obtenido? O como puedo hacer lo que "necesito"? (cargar archivo completo, y devolver valor)

Espero haberme explicado bien y que se entienda lo que quiero, o por lo menos el objetivo a esperar.

Cualquier referencia, comentario, etc, son bien recibidos.

Un saludo y gracias por adelantado

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 02 Dic 2010 01:44 am
Pues solo graba el resultado en una variable, y dicho de paso, la función finalizadaCarga, no debería contener un return.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 02 Dic 2010 08:19 pm
Hola Hernan y demás:

Efectivamente iba por el mal camino y me has orientado, pero sigo teniendo problemas, te explico.....

Respecto al "return" eso ya eran pruebas que iba haciendo. Como ese era el valor que queria devolver, pues lo había dejado pero como seguro bien dices, no va.

Siguiendo tus comentarios y según veo en el manual de programacion de AS3, voy por el camino de insertarlo en una variable. (igual estoy soltando un poco de mas de comentarios, pero es por si a alguien le ayuda...) Puesto que las variables solo estan disponibles dentro de su ámbito (metodo, o donde este), si no me equivoco, tiene que ser declarada una variable en modo "static" para que este disponible desde cualquier parte. Entonces, supuestamente (y digo supuestamente porque me sigue sin funcionar), el código quedaría así

Código ActionScript :

   public class miClase
   { 
      public static var testeo:String = "sin cambiar";

      public function prueba()
      {
            var request:URLRequest = new URLRequest("archivo.txt");
            request.method=URLRequestMethod.POST;
            var loader:URLLoader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.TEXT;
            loader.load(request);
            loader.addEventListener(Event.COMPLETE, finalizadaCarga);
         
            function finalizadaCarga(event:Event)
            {
               trace (testeo + " 1");
               trace (event.target.data + " 2");
               testeo=event.target.data;
               trace (testeo + " 3");
            }
      }

      public function prueba2()
      {
         trace(testeo + " desde metodo prueba2");
      }
   }


Hasta aquí el fichero AS. Vamos ahora dentro de Flash

Código :


stop();
import C_conectaBD; // como lo tengo en la misma ruta en mi disco, da igual que este, como que no este

var consulta:miClase = new miClase(); //Declaramos el objeto
consulta.prueba();
trace (miClase.testeo + " Estatica");
consulta.prueba2();



Y el resultado obtenido sería el siguiente

Código :

sin cambiar Estatica
sin cambiar desde metodo prueba2
sin cambiar 1
nombre=MiNombre&apellido=MiApellido 2
nombre=MiNombre&apellido=MiApellido 3


Porque no se me almacena el valor deseado en la variable? Podeis orientarme con esto?

Como siempre, muy agradecido de antemano

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 02 Dic 2010 08:51 pm
Porque static es eso, estática.

Haz:

Código ActionScript :

public static var testeo:String = "sin cambiar"; 


Por

Código ActionScript :

public var testeo:String = "sin cambiar"; 


Además de esto, debes recordar que para invocar una variable, debe estar primero cargada, lo que implica que no puedes solo llamar a prueba2() y esperar resultados actualizados.

Igual el código esta bastante mal, mucho para ser exactos. Te copio un poco la estructura que deberías tener:

Código ActionScript :

 public class miClase 
   {  
      private var testeo:String = "sin cambiar"; 
 
      public function prueba() 
      { 
            var request:URLRequest = new URLRequest("archivo.txt");
            request.method=URLRequestMethod.POST;
            var loader:URLLoader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.TEXT;
            loader.load(request); 
            loader.addEventListener(Event.COMPLETE, finalizadaCarga);
          
       } 
       function finalizadaCarga(event:Event) 
            { 
               testeo = event.target.data;
      prueba2();
            } 
 
      public function prueba2() 
      { 
         trace(testeo + " desde metodo prueba2");
      } 
   } 


Y aún así el código está desprolijo y mal aplicado. Pero al menos así va mejor orientado.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 04 Dic 2010 09:02 am
Hola Hernan y foreros:

Lo primero indicar que puse estatica puesto que según me pareció leer en el manual de AS3, se utilizaba esta peculiaridad de las variables para que estuviera disponible desde cualquier parte de la clase, y al ver que se podia aplicar tanto a var como a const, pensé que ese era el camino (por si alguien le interesa, página 100 de Programacion orientada a objetos con ActionScript (programacion con actionscript 3.0 para Flash)).

Dicho esto te comento que soy principiante con la OOP, se que no es la mejor estructura del mundo, pero estoy aprendiendo e intento esforzarme lo que puedo para mejorar (o intentarlo al menos ;) ). Cualquier sugerencia al respecto, siempre es de agradecer.

Mas cosas: he hecho lo que me has sugerido, pero sigo teniendo problemas, te cuento mi codigo de nuevo...

Tenemos miClase.as

Código ActionScript :

...
      // Declaracion de variables
      public var testeo:String = "sin cambiar";

      //Declaracion de métodos

      public function prueba()
      {
         var testeo2:String;
         var request:URLRequest = new URLRequest("archivo.txt");
         request.method=URLRequestMethod.POST;
         var loader:URLLoader = new URLLoader();
         loader.dataFormat = URLLoaderDataFormat.TEXT;
         loader.load(request);
         loader.addEventListener(Event.COMPLETE, finalizadaCarga);
      }
      function finalizadaCarga(event:Event)
      {
         trace (testeo + " 1");
         trace (event.target.data + " 2");
         testeo = event.target.data;
         trace (testeo + " 3");
         prueba2();
      }
            
      public function prueba2()
      {
         trace(testeo + " desde metodo prueba2");
      }
...


y ahora te muestro el código de mi .fla

Código :

stop();
var test:String;
var consulta:miClase = new miClase();
consulta.prueba();
trace (consulta.testeo + " Variable desde Flash");


y el resultado es...

Código :

sin cambiar Variable desde Flash
sin cambiar 1
nombre=MiNombre&apellido=MiApellido 2
nombre=MiNombre&apellido=MiApellido 3
nombre=MiNombre&apellido=MiApellido desde metodo prueba2


Ante esto, he pensado que si desde "dentro" de prueba2 obtenía el valor correcto, si le hacía un return a esta última ya lo tendría, pero va a ser que sigo sin conseguir el principal objetivo..... Devolver a flash un valor obtenido desde un archivo / BD externo, para poder meterlo en una variable dentro de .fla y trabajar con el :(

Cualquier ayuda es bien recibida

Un saludo

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 04 Dic 2010 07:30 pm
Y mira que lo intento pero nada, que no hay forma. Ya me estoy plantenado eso de.....

Esto es posible?
Voy por el mal camino?
No se puede pasar desde un metodo addEventListener el resultado a .fla?
Hay alguna otra forma (sin usar addEventListener) de obtener el mismo resultado, o que sea igualmente funcional?
He visto que las variables siempre se "ejecutan" lo primero (al lanzar el .fla) antes que el resto, por eso siempre salen sin asignar. Hay alguna forma que se "ejecuten" al final?

La verdad que ya no se ni que mirar ni que probar :cry: . En estos momentos de desesperacion hecho de menos la programacion lineal, las variables globales... ufff, que bonitos recuerdos....... ^^

Repito,,, cualquier sugerencia o idea es bien recibida. Gracias de antemano

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 04 Dic 2010 11:16 pm
Ya te lo había dicho, NO puedes hacer esto:

Código ActionScript :

stop();
var test:String;
var consulta:miClase = new miClase();
consulta.prueba();
trace (consulta.testeo + " Variable desde Flash");


Ya que eso no da el tiempo para la carga correcto. Si ejecutas eso, siempre traerá el primer valor, nunca el actualizado, ya que para que funcione, debe primero cargar el txt y luego ejecutar la función. Si bien parece "rápido", tiene un delay de microsegundos, y eso al player le importa mucho.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 05 Dic 2010 06:21 am
Ok, ese código no se puede hacer funcionar.

Entonces que se puede hacer? Como se puede pasar el valor? O no se puede pasar de ninguna forma?

Repito el objetivo por si no esta claro: Cargar un archivo de texto / valor de BD, y pasarlo a un .fla (variable) para poder trabajar con ella.

Un saludo

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 05 Dic 2010 09:16 am
Si, puedes... Pero tienes que usar el valor LUEGO de cargarse. No ANTES.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 05 Dic 2010 10:12 am
Vale, ahora ya tengo claro que se puede, pero... podría alguien indicarme como? No busco que me hagais el código, pero si agradecería algun ejemplo, orientacion, referencia a algun manual o web, lo que sea de como usar el valor en el .fla luego de cargarse y no antes, algo por donde continuar. Estoy atascado en este punto.

Un saludo

P.D. Igual en la ejecucion es una tonteria, pero para los principiantes en as3 y oop como yo...

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 05 Dic 2010 11:37 am
Es que ya te puse el código de como hacerlo, ejecutas las funciones y acciones que quieras en el listener que recibe la información, de esta forma puedes estar seguro que tienes todo lo que necesitas.

Si estás trabajando entre clases, puedes hacer el dispatch de un evento para escucharlo desde otro lado.

Pero básicamente, ya lo puse en el código como hacerlo.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 05 Dic 2010 03:48 pm
Hola Hernan y resto:

Gracias por intentar que lo entienda.... He vuelto a empezar con todo lo que me has comentado desde el principio, y el resunltado "final" entiendo que es así.....

Documento llamado archivoas.as situado en el mismo lugar que el .fla

Código ActionScript :

package
{
   public class archivoas
   {
      // Importacion de clases
      import flash.events.*;
      import flash.net.URLLoader;
      import flash.net.URLLoaderDataFormat;
      import flash.net.URLRequest;
      import flash.net.URLRequestMethod;

      // Declaracion de variables
      var resultado_consulta:String;
      
      //Declaracion de métodos

      public function prueba()
      {
         var request:URLRequest = new URLRequest("archivo.txt");
         request.method=URLRequestMethod.POST;
         var loader:URLLoader = new URLLoader();
         loader.dataFormat = URLLoaderDataFormat.TEXT;
         loader.load(request);
         loader.addEventListener(Event.COMPLETE, finalizadaCarga);
      }
      public function finalizadaCarga(event:Event)
      {
         trace (event.target.data + " directo");
         resultado_consulta=(event.target.data);
         finalizadaCarga2();
      }
      public function finalizadaCarga2()
      {
         trace (resultado_consulta + " desde finalizadaCarga2");
      }   
   }
}


Ahora el .fla contiene

Código :

stop();
var test:String;
var consulta:archivoas = new archivoas();
consulta.prueba();


Y el resultado obtenido es el siguiente:

Código :

nombre=MiNombre&apellido=MiApellido directo
nombre=MiNombre&apellido=MiApellido desde finalizadaCarga2


Hasta aqui todo perfecto. Pero sigo teniendo la misma duda del principio...
---> ¿como puedo introducir el valor obtenido en una variable, por ejemplo, variable_resultado2:String; (deltro del archivo .as) de forma permanente? (para que siempre que la consulte pueda obtener el valor correcto), o lo que mas o menos es equivalente,,,
---> ¿como podría introducir ese mismo valor en la variable test del .fla?

¿porque la necesidad de sacar el valor fuera? un caso hipotético podria ser el siguiente:
Un usuario introduce tipo de animal "mamifero", se solicita una consulta a la base de datos y nos da unos datos que tenemos que "procesar" a posteriori y que difieren del resto de animales. Con el código actual (dentro de la funcion), todo se tendría que ejecutar dentro de dicha funcion porque fuera no tenemos esos datos obtenidos de la BD o fichero. Si despues preguntaramos es un decir, si es acuatico o no, cuantas patas tienen,... o sea una funcion tras otra (imaginemos que a una de ellas necesitemos varios de esos valores) o podríamos tambien tener que poner una funcion dentro de otra, ... cosa que no es "fino" en la programacion el ir anidando funciones (o métodos). Por eso mi objetivo es "sacar" a una variable (no constante) a la "raiz" del código (a test por ejemplo) y que ese valor esté de forma permanente para cuando lo necesite.

Me he extendido en este porque me parece que no me expliqué anteriormente de forma correcta mi "meta". Espero que ahora si que haya quedado clara mi duda.

Un saludo y gracias por vuestra paciencia con este novato.

P.D. Hernan, con respecto a lo que me has comentado que ya me habias dicho, creo que lo he introducido todos los cambios en el código que indicabas. Si me falta algo, perdonarme una vez mas.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 05 Dic 2010 05:35 pm
Hernan te lo dijo desde un principio..pero bueno hasta donde entendi quieres acceder a esa variable desde el fla o bien otra clase..teniendo la instancia ya esta accesible y recuperar su valor por medio de una funcion :

Código ActionScript :

//tienes algo asi
public function onComplete(e:Event):void
{
   _data = e.target.data;
}

public function getData():*
{
   return _data;
}

//FLA
var data = getData();
data.someValue;


tips: tu clase extiendela de EventDispatcher usa un metodo o variable que reciba el archivo a cargar esto te provoca un reuso de la clase..cuando este la cargar lista dispara un CustomEvent para darte cuenta desde fuera de la clase que los datos estan "Listos" para accederse..y la variable que almacena lo datos la obtienes atravez de un metodo o un getter..como en ejemplo.

Jonathan

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 06 Dic 2010 05:06 am
Complementado lo que dijo maneuver, sería mejor usar un getter en este caso:

Código ActionScript :

public function get data():*{
   return _data
}


Ejemplo de uso:

Código ActionScript :

var data:* = className.data;


Aún así, para usarla debes PRIMERO evaluar que la carga este lista o no funcionará.

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 10 Dic 2010 04:32 pm
Hola de nuevo:

Ya he implementado algunas cosas y sigo teniendo algunas dudas. Os comento lo que he ido haciendo

Código :

tips: tu clase extiendela de EventDispatcher


Hasta aquí esto...

Código ActionScript :

   public class archivoas extends EventDispatcher


Código :

usa un metodo o variable que reciba el archivo a cargar esto te provoca un reuso de la clase


Esto si no me equivoco, ya lo tenia...

Código ActionScript :

         loader.addEventListener(Event.COMPLETE, finalizadaCarga); 
...
      public function finalizadaCarga(event:Event):void
      { 
...


Código :

cuando este la cargar lista dispara un CustomEvent para darte cuenta desde fuera de la clase que los datos estan "Listos" para accederse


Aquí esto no se exactamente que hace, entiendo que "dispara un evento", pero he estado mirando algunos comentarios y se permite poner valores de constantes, etc... además no se si lo estoy poniendo en el lugar correcto

Código ActionScript :

         dispatchEvent(new Event("finalizado"));    


Código :

y la variable que almacena lo datos la obtienes atravez de un metodo o un getter..como en ejemplo.

public function onComplete(e:Event):void 
{ 
   _data = e.target.data; 
} 

public function getData():* 
{ 
   return _data; 
} 


El get lo hago funcionar, pero con el set, sigo teniendo problemas, con el ejemplo introducido no consigo que haga la "insercion del valor de una forma "fija"". Además en este punto si no me equivoco, amplia Hernan con...

Código :

Complementado lo que dijo maneuver, sería mejor usar un getter en este caso:

Código :

public function get data():*{ 
   return _data 
}


Ok, implementado en mi código y que yo sepa, incluyendo todas las modificaciones indicadas quedaría así. Tengo la duda del Dispach.

Código ActionScript :


package 
{ 
    // Importacion de clases 
    import flash.events.*; 
    import flash.net.URLLoader; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 
   
   public class archivoas extends EventDispatcher
   { 
      // Declaracion de variables 
      private var _dato:*; 
       
      //Declaracion de métodos 
 
      public function prueba():void
      { 
         var request:URLRequest = new URLRequest("archivo.txt"); 
         request.method=URLRequestMethod.POST; 
         var loader:URLLoader = new URLLoader(); 
         loader.dataFormat = URLLoaderDataFormat.TEXT; 
         loader.load(request); 
         loader.addEventListener(Event.COMPLETE, finalizadaCarga); 
      } 

      public function finalizadaCarga(event:Event):void
      { 
         trace (event.target.data + " directo"); 
         _dato=event.target.data;
         dispatchEvent(new Event("finalizado"));    
         // Tambien se puede poner algo así como dispatchEvent(new Event(Event.COMPLETE))
         // o dispatchEvent(new Event(archivoas.MiConstante_creada_public_static_const))
      } 

      public function get dato():*
      { 
       return (_dato);
      }    
   } 
} 



y en .fla

Código ActionScript :

stop();
var test:* ;
var consulta:archivoas = new archivoas();
consulta.prueba();
test=consulta.dato;


En test todavía no consigo introducir el valor deseado. Supongo que será por el dispatchEvent, que es lo que me surgen dudas. Alguna sugerencia?

Gracias por adelantado de vuestra ayuda.

P.D. Indicaros que para vosotros que llevais años con AS y posiblemente con otros lenguajes, esto es una tonteria, estupidez, el codigo está fatal, mal estructurado, etc... Lo asumo y acepto, porque yo llevo muy poco con esto. Posiblemente cuando llevabais tan poco como yo, habían cosas que os bloqueaban y que "no veiais" por mucho que os lo dijeran, y posteriormente visteis que eran muy simples de resolver. Yo estoy en esa fase, la misma que "supuestamente" habeis pasado todos los que sabeis programar y que en la actualidad teneis años de experiencia. Mi insistencia es por querer aprender, por mejorar, por superarme, es simplemente por eso y por nada mas.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 11 Dic 2010 01:56 am
algo revuelto..me referia mas o menos a esto :

Código ActionScript :

package  
{
   import flash.events.EventDispatcher;
   import flash.events.Event;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   
   public class CargaArchivo extends EventDispatcher
   {
      public static const CARGA_FINALIZADA:String = "cargaFinalizada"
      private var _path:String;
      private var _cargador:URLLoader;
      private var _dato:*;
      
      public function CargaArchivo() {
         // constructor code
      }
      
      private function iniciaCarga():void
      {
         _cargador = new URLLoader();
         _cargador.addEventListener(Event.COMPLETE, onComplete,false,0,true);
         
         try{
            _cargador.load(new URLRequest(_path));
         }catch(err:Error)
         {
            trace(err.message);
         }
      }
      
      private function onComplete(e:Event):void
      {
         _cargador.removeEventListener(Event.COMPLETE,onComplete);
         _dato = e.target.data;
         dispatchEvent(new Event(CARGA_FINALIZADA));
      }
      
      public function set path(val:String){
         _path = val;
         iniciaCarga();
      }
      
      public function get dato():*{
         return _dato;
      }

   }
}

FLA

Código ActionScript :

import flash.events.Event;

var carga:CargaArchivo = new CargaArchivo();
carga.path = "archivo.txt";
carga.addEventListener(CargaArchivo.CARGA_FINALIZADA,cargaCompleta,false, 0, true);

var dato:*;

function cargaCompleta(e:Event):void
{
   carga.removeEventListener(CargaArchivo.CARGA_FINALIZADA,cargaCompleta);
   dato = carga.dato;
   trace(dato);
}


algun pattern tambien facilita mucho las cosas mas en esto de la elegancia y la OOP pura.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 12 Dic 2010 12:05 pm
Hola maneuver y resto:

Se nota la experiencia y eso se agradece ;) Voy a intentar aplicar a lo que haga la estructura que me has comentado. Seguro que me costará pero espero conseguirlo.

Sigo teniendo una duda, la del .fla. Cierto que tenemos el valor "carga.dato" dentro de la funcion, lo aplicamos a la variable "general" del .fla con nombre "dato" "dentro de la funcion". En teoría debería tomar ese valor tanto dentro de la funcion como fuera. Es una cuestion que me persigue desde los inicios de este asunto, tener el valor "recuperado del exterior" en una variable en la "raiz" del fla, y no dentro de una funcion :shock:

Si hago un trace de la variable "dato" fuera de la funcion y posterior a ella, no debería mostrar el valor que se le ha asignado?. Dicho con otro código para intentar representar lo que digo...

Código ActionScript :

var test:*;
function prueba(value:*):void
{
   test=value;
   trace (test + " dentro");
}
prueba("introducido");
trace (test + " fuera");


El resultado como ya sabreis es el siguiente

Código :

introducido dentro
introducido fuera


Y porqué al asignar la variable dato muestra lo siguiente?

Código :

undefined  // el trace "fuera y bajo" de la funcion cargaCompleta
contenido_archivo_txt // El trace que esta dentro de la funcion


Primero se "ejecuta" el trace de la variable que esta "posterior" a la funcion "cargaCompleta" y despues se ejecuta la funcion? Porque en un caso si que asigna el valor correcto y en otro no?.

Comentarme si me equivoco pero el motivo son los "milisegundos" en asignar el valor de una variable, que en un caso tiene que abrir un txt, etc, y en el otro es una simple asignacion?

Si el motivo es este, mi siguiente pregunta sería: Hay forma de "parar" la ejecucion del código hasta que se haya asignado la variable y posteriormente continuar con el código para asegurarme que la variable está cargada en la "raiz" del .fla? (o alguna otra técnica que un inexperto como yo desconozca)

Si el motivo no es ese: Porque no se asigna el valor de la variable de forma correcta, y porque se ejecuta el "trace" posterior a la funciona "antes" de la funcion?

No se si me he explicado bien, si hay alguna cosa que hayan dudas, comentarmelo e intentaria explicarlo de otra forma...

Como siempre, muy agradecido por vuestros comentarios.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 12 Dic 2010 04:51 pm
Es por los milisegundos que le toma al FL cargar el archivo, la idea como ya lo dijo Hernan es que del Handler llames otra funcion en la cual manipules los datos, la idea es siempre esa trabajar con funciones , si te fijas trabajar con clases no son mas que funciones que se invocan entre ellas mismas o llamadas desde otra clases, pero salir desde el handler y seguir jugando con la variable nunca me ha salido al menos como te lo vuelvo a decir que sea atravez de otra funcion.

Código ActionScript :

function cargaCompleta(e:Event):void 
{ 
   carga.removeEventListener(CargaArchivo.CARGA_FINALIZADA,cargaCompleta); 
   dato = carga.dato;
   displayData();
}

function displayData():void
{
   trace(dato);
}


Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 14 Dic 2010 08:05 pm
Hola Jonathan:

Muchas gracias por tu ayuda. Ahora esta cuestion ya la tengo clara. He tardado en responder por resolver unas dudas al respecto, pero respecto a esto, creo que ya he cogido la onda. me surgen otras, pero eso ya son motivo de otras discusiones.

Muchas gracias a todos por vuestras aportaciones.

Un saludo

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox

 

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