Comunidad de diseño web y desarrollo en internet online

Duda con onLoad

Citar            
MensajeEscrito el 11 Sep 2008 11:34 am
Se que la duda planteo es muy tonta y la solucion debe ser facil,pero no me aclaro.
Estoy recogiendo una consulta a base de datos mediante loadVars. La consulta devuelve el numero de filas que tiene la tabla. Hasta ahi todo funciona perfectamente.
El problema es que quiero tener disponible el numero filas en todo el script, pero el ambito de la variable solo la deja definida dentro de la funcion onLoad. Que puedo hacer para tenerla definida en toda la pelicula?.

Código :

var invMuestra:LoadVars=new LoadVars;
var invRecibo:LoadVars=new LoadVars;

invMuestra.sendAndLoad("http://localhost/phpflash/invRec.php",invRecibo,"POST");
invRecibo.onLoad=function(){
   var numeroLineas:Number=Number(this.numLineas);
   var numeroResistencias:Number=Number(this.numResistencias);

}
trace(numeroLineas);

stop();



Al hacer trace el mensaje que se muestra es undefined.

Gracias

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Sep 2008 12:30 pm
Te explico como funciona el scope de las variables en AS:

Código ActionScript :

var numero:Number = 0;

function traceMe():Void{

   var numero:Number = 10;
   trace(numero);

}


traceMe(); //Lanzará 10
trace(numero); //Lanzará 0


El problema es que las variables declaradas dentro de la funcion con (var) sólo tendrán valor dentro de esta, es a lo que se llama variable local porque no tendrán valor fuera, a diferencia que las declaradas fuera de la función como la que declaro con valor "0" en el ejemplo, está tendrá validez en todo el scope del timeline (si está declarada en este), por ejemplo:

Código ActionScript :

var numero:Number;

function traceMe():Void{

   numero = 10;
   trace(numero);

}


traceMe(); //Lanzará 10
trace(numero); //Lanzará 10


Como no ha sido declarada la variable dentro de la función sino fuera de esta, tendrá validez fuera y dentro de esta.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 11 Sep 2008 12:45 pm
Gracias por aclararme lo del scope.
Por desgracia sigue sin funcionar, deber ser por el momento en el que se lanza el onLoad

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Sep 2008 01:14 pm
Por cierto, se me habia olvidado postearlo.
He cambiado el codigo y lo he dejado asi

Código :

var invMuestra:LoadVars=new LoadVars;
var invRecibo:LoadVars=new LoadVars;
var numeroLineas:Number;
var numeroResistencias:Number;

invMuestra.sendAndLoad("http://localhost/phpflash/invRec.php",invRecibo,"POST");
invRecibo.onLoad=function(){
   numeroLineas=Number(this.numLineas);
   numeroResistencias=Number(this.numResistencias);
   //trace(numeroLineas);
}
trace(numeroLineas);

stop();

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Sep 2008 02:51 pm
Ahora en este momento el problema no es de scope, ya el problema es otro.

Mira Action Script no es como otros lenguajes más antiguos como basic que cada línea espera ser ejecutada para que se ejecute la otra, sino que en millésimas de segundos se ejecutan todas las líneas que tengas ubicadas en una clase o un frame.

Lo que sucede es que la línea:

Código ActionScript :

trace(numeroLineas);


Se ejecuta a la misma vez que todas y en ese momento "numeroLineas" no tiene ningún valor, el valor lo adquiere un tiempo después, cuando se termina de leer el php. Es por eso que cuando se lee contenido externo no se hace nada hasta que este sea leído, después haces todo lo demás, debes hacer algo como esto:

Por cierto no hace falta que utilices sendAndLoad, como lo que haces es leer y no envías ningún dato puedes utilizar load

Código ActionScript :

var myLoadVars:LoadVars = new LoadVars();

var numeroLineas:Number;
var numeroResistencias:Number;

myLoadVars.load("http://localhost/phpflash/invRec.php");

//---OnLoad
myLoadVars.onLoad = function():Void{
   
   numeroLineas = Number(this.numLineas);
   numeroResistencias = Number(this.numResistencias);
   
   beginApplication();

};

//---Función de comenzar todo
function beginApplication():Void{
   
   trace(numeroLineas);
   
}

stop();

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 11 Sep 2008 03:02 pm
Perrfecto. Muchas gracias, ya tira.

Por a_j

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 29 Sep 2008 08:34 am
Gracias por la aclaración, aunque para llamar a la función <beginApplication()> desde botones tenga que poner el <onRelease> de los mismos dentro de <onLoad>.
Podría querdar así:

Código :

listAlmac_mc.texto_txt.autoSize = true;
listTrans_mc.texto_txt.autoSize = true;

listAlmac_mc.setMask (mask_mc);
listTrans_mc.setMask (mask1_mc);

var list_lv:LoadVars = new LoadVars ();

list_lv.onLoad = function (exito) {
   if (exito) {

      listTrans_mc.texto_txt.htmlText += "<br>";
      listTrans_mc.texto_txt.htmlText += "- " + this.pa;
      listTrans_mc.texto_txt.htmlText += "- " + this.co;
      listTrans_mc.texto_txt.htmlText += "- " + this.gr;
      listTrans_mc.texto_txt.htmlText += "- " + this.ca;
      listTrans_mc.texto_txt.htmlText += "- " + this.me;
      listTrans_mc.texto_txt.htmlText += "- " + this.pl;
      listTrans_mc.texto_txt.htmlText += "- " + this.en;
      listTrans_mc.texto_txt.htmlText += "- " + this.sa;

      listAlmac_mc.texto_txt.htmlText += "<br>";
      listAlmac_mc.texto_txt.htmlText += this.rec;
      listAlmac_mc.texto_txt.htmlText += this.alm;
      listAlmac_mc.texto_txt.htmlText += this.pre;

      listAlmac_mc.marco_mc._height = listAlmac_mc.texto_txt._height + 20;
      listAlmac_mc.marco_mc._width = listAlmac_mc.texto_txt._width + 20;

      listTrans_mc.marco_mc._height = listTrans_mc.texto_txt._height + 20;
      listTrans_mc.marco_mc._width = listTrans_mc.texto_txt._width + 20;

      btn_mc.onRelease = function () {
         beginApplication (listAlmac_mc,mask_mc);
      };

      btn1_mc.onRelease = function () {
         beginApplication (listTrans_mc,mask1_mc);
      };
   }
};

list_lv.load ("textos/mensajes.txt");

function beginApplication (mc, mas):Void {
   mas._height = mc.marco_mc._height;
   mas._width = mc.marco_mc._width;
   mas._x = mc._x;
   mc._y = mas._y - mas._height;
}

Gracias

Por antonio_L

161 de clabLevel



Genero:Masculino  

de Linares

firefox

 

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