Comunidad de diseño web y desarrollo en internet online

Cómo llamar a una instancia aún no definida

Citar            
MensajeEscrito el 09 Sep 2010 12:32 am
Buenas,

Ya llevo un tiempo en as3 y el tema de solo poder llamar a las instancias si, previamente, han sido definidas en un poco coñazo, la verdad.

El caso es q tengo unas cajas de texto q se crean dinámicamente y si ya las has creado una vez y vuelves a acceder a ellas para cambiarles el texto q contienen, el segundo texto se superpone al primero, en vez de q el primero se borre y se visualice solo el segundo.

Total, tenemos una función q llama al primer texto a introducir en las cajas q, dicha función, crea dinámicamente y, por otra parte, tenemos otra función q llama al segundo texto a introducir en las cajas q, esta segunda función, crea dinámicamente.

Al ver q se superponen los textos, creo un condicional en la segunda función, el cual comprueba si las primeras cajas existen, si es así les introduzco directamente el segundo texto para no tener q crear de nuevo las mismas cajas y, si por contra el condicional dice q no existen las primeras cajas, entonces las creo dinámicamente y les introduzco el segundo texto.

El problema es q, claro, en la primera función estoy añadiendo unas cajas mediante addChild a la escena y en la segunda función q se encuentra al mismo nivel q la primera (osea, q la segunda función no está en el interior de la primera), estoy llamando a esas cajas q a efectos del código, aún no han sido creadas, por lo q me da el puñetero error de intento de acceso a una propiedad no definida.

Os adjunto un ejemplito simple para q os hagáis una idea:

Código ActionScript :

function primerTexto():void{
   var cajaDeTexto:TextField = New TextField();
   cajaDeTexto.text = "Primer texto";
   addChild(cajaDeTexto);
}

function segundoTexto():void{
   if(!(content_mc.textOnly_mc == null)){
      cajaDeTexto.text = "Segundo texto";
   }else{
      var cajaDeTexto:TextField = New TextField();
      cajaDeTexto.text = "Segundo texto";
      addChild(cajaDeTexto);
   }
}


Existe algún modo en as3 de llamar a esas cajas de texto q aún no han sido definidas? Sino, se os ocurre alguna otra forma de reselver esto?

Por deskarrada

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Sep 2010 12:47 am
No entiendo muy bien que es lo que quieres hacer, pero intentando entenderte veo que un patron de fabrica te serviria mucho.

http://www.adobe.com/devnet/actionscript/articles/ora_as3_design_patterns/ora_as3_design_patterns_ch02.pdf

Saludos

Por Gz.Francisco

378 de clabLevel



Genero:Masculino  

Programador economista y buzo

chrome
Citar            
MensajeEscrito el 09 Sep 2010 12:59 am
Me miraré el pdf q me has pasado, pero eso de las classes aún no me lo manejo mucho, aunq se es muy útil.

Voy a intentar explicarme mejor, porq se q por escrito puede resultar lioso.

Mi objetivo es poder cambiar infinitas veces el contenido de las cajas de texto creadas dinámicamente.

Si las cajas no se creasen dinámicamente, la respuesta sería bien sencilla:

Código ActionScript :

function primerTexto():void{  
   cajaDeTexto.text = "Primer texto"; 
}
function primerTexto():void{ 
   cajaDeTexto.text = "Primer texto"; 
}


Pero al crearse dinámicamente, no se como reemplazar las anteriores cajas por las nuevas ó elimiar las anteriores cajas al crear las nuevas, pues al ser dos funciones al mismo nivel, si las primeras cajas no han sido creadas, la segunda función llama a una instancia aún no definida, por lo q da error.

Por deskarrada

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Sep 2010 01:00 am
Perdón, este sería el código correcto del ejemplo anterior:

Código ActionScript :

function primerTexto():void{   
   cajaDeTexto.text = "Primer texto";  
} 
function segundoTexto():void{  
   cajaDeTexto.text = "Segundo texto";  
}

Por deskarrada

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Sep 2010 01:19 am
Ah ya me ha quedado mas claro tu objetivo.

Creas una instancia de TextField llamada "campo1", le asignas texto.

Luego ¿Quieres buscar la instancia "campo1" y le cambias el texto? o ¿Quieres crear una instancia "campo2" y asignarle otro texto?

Por Gz.Francisco

378 de clabLevel



Genero:Masculino  

Programador economista y buzo

chrome
Citar            
MensajeEscrito el 09 Sep 2010 01:25 am
Vale, ya lo he resuelto.

No voy a postear la respuesta, porq, aunq el ejemplo q os he dado era muy simple, la realidad es q mi código es una barbaridad y la solución a la q he llegado implica una reestructuración de dicho código q no se puede explicar en cuatro líneas.

De todas formas, muchas gracias.

Por deskarrada

18 de clabLevel



 

chrome

 

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