Comunidad de diseño web y desarrollo en internet online

consulta sobre Flashvars, arrays y split

Citar            
MensajeEscrito el 03 Dic 2010 08:17 pm
hola, buenas tardes;
estoy armando una botonera en flash dinamica, donde el texto o rotulo de los botones, la url y el estado de los mismos son tomados desde una variable que el html le pasa a flash;
la variable que pasa el html esta compuesta de esta manera:

Código HTML :

<param name=FlashVars value="boton=nombre1, seccion1.html, no|nombre2, seccion2.html, no|nombre3, seccion3.html, no">


esta variable la tomo desde flash como un string y dicho string lo convierto en un array de esta manera:

Código ActionScript :

var myString:String=boton;
var myArray:Array=myString.split('|');


de esta forma obtengo:
myArray[0] --> nombre1, seccion1.html, no
myArray[1] --> nombre2, seccion2.html, no
myArray[2] --> nombre3, seccion3.html, no

una vez hecho esto, mediante un bucle genero otro array donde separo, por medio de las comas cada elemento o nodo de myArray (nombre i por un lado, seccion i por otro, y estado por otro);

Código ActionScript :

for(var i=0; i<myArray.length; i++){
   var arrayTemp:Array=myArray[i].split(',');
}


si paso estos datos a variables obtengo cada uno de los elementos o nodos de myArray[2] cada uno de ellos en un campo de texto dinamico;
lo que yo necesito hacer es poder llegar a tener algo asi:

Código ActionScript :

this.texto1=arrFinal[0][0];
this.texto2=arrFinal[1][0];
this.texto3=arrFinal[2][0];

this.url1=arrFinal[0][1];
this.url2=arrFinal[1][1];
this.url3=arrFinal[2][1];


pido disculpas si me enrolle un poco o no fui muy claro;
si alguien me comprendio y pudiera ayudarme, lo agradeceria mucho;
saludos,
sebas.

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Dic 2010 08:28 pm
perdon, por las dudas aclaro que lo que quiero hacer en definitiva es convertir un string en un array de dos dimensiones;

muchas gracias!
saludos,
sebas.

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Dic 2010 08:48 pm
Para ello metes un array dentro de otro, en la rutina donde obtienes el segundo array, ;lo vas metiendo en el primero

Código ActionScript :

for(var i=0; i<myArray.length; i++){ 
   var arrayTemp:Array=myArray[i].split(',');
   myArray.push(arrayTemp)
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Dic 2010 09:34 pm
q tal jorge!
gracias por responder (siempre) tan rapido!

al incluir esa linea de codigo que me sugeris, cuando browseo el swf en el firefox me sale un mensaje que me dice algo como "Un script de esta pelicula esta provocando que el reproductor de flash se ejecute lentamente..." y si se lo saco, carga el swf;
que puede ser?

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Dic 2010 11:28 pm
Es que estás modificando el array del contador, debe ser:

Código ActionScript :

var total:Number = myArray.length; 
for(var i=0; i<total; i++){  
   var arrayTemp:Array=myArray[i].split(','); 
   myArray.push(arrayTemp) 
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2010 02:20 pm
hola jorge,
aqui estoy, iniciando mi semana laboral;
perdon que no respondi tu post, pero estuve ausente;
estoy aplicando tu recomendacion, pero solo logro "capturar" el ultimo dato del conjunto de datos que tengo en mi flashvars;
asi:

Código ActionScript :

var myString:String=boton;
var myArray:Array=myString.split('|');

var total:Number=myArray.length;
for(var i=0; i<total; i++){
   var arrayTemp:Array=myArray[i].split(',');
   myArray[i].push(arrayTemp);
}

this.texto1=arrayTemp[0];


y lo que obtengo es: TEXTO1 = CONTACTO, cuando lo que yo espero es que arrayTemp[0] sea INICIO (mis datos son INICIO, CATALOGO, CONSEJOS, ASISTENCIA, VENTA, CONTACTO);

pero de esta manera, si obtengo lo que deseo:

Código ActionScript :

var myString:String=boton;
var myArray:Array=myString.split('|');

for(var i=0; i<myArray.length; i++){
   var arrayTemp0:Array=myArray[0].split(',');
   var arrayTemp1:Array=myArray[1].split(',');
   var arrayTemp2:Array=myArray[2].split(',');
   var arrayTemp3:Array=myArray[3].split(',');
   var arrayTemp4:Array=myArray[4].split(',');
   var arrayTemp5:Array=myArray[5].split(',');
   //var arrMalu:Array=arrayTemp;
}

this.texto1=arrayTemp0[0];
this.texto2=arrayTemp1[0];
this.texto3=arrayTemp2[0];
this.texto4=arrayTemp3[0];
this.texto5=arrayTemp4[0];
this.texto6=arrayTemp5[0];

this.url1=arrayTemp0[1];
this.url2=arrayTemp1[1];
this.url3=arrayTemp2[1];
this.url4=arrayTemp3[1];
this.url5=arrayTemp4[1];
this.url6=arrayTemp5[1];

this.estado1=arrayTemp0[2];
this.estado2=arrayTemp1[2];
this.estado3=arrayTemp2[2];
this.estado4=arrayTemp3[2];
this.estado5=arrayTemp4[2];
this.estado6=arrayTemp5[2];


de esta manera, funciona como yo quiero, pero se que no es una forma muy prolija que digamos;
ademas, no logro hacer que me reconozca el estado del boton, para que estos figuren como activados o desactivados, segun le pase el parametro desde flashvars (no o si);
pero bueno, de a una cosa por vez, se llega a destino;

gracias, y buena semana!

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Dic 2010 02:41 pm
Ok, ya te funciona, ahora le puedes dedicar un poco de tiempo a razonarlo. ¡por que será que aparece el último y no el primero? Posiblemente lo esté armando en orden inverso. ¿Que datos tienes? Traza los arrays ... sino tienes tiempo déjalo así y ruega que no tenga que escalar.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2010 02:58 pm
si, jorge!
estoy en eso, razonandolo para dejarlo mas prolijo y en caso que en un futuro tenga que escalar, que lo haga.
con respecto al estado del boton, si desde flashvars le paso "si", y luego dentro de flash le pregunto:

Código ActionScript :

if(this.estado1=="si"){
   this.mcBtn.btInicio.gotoAndPlay("over");
   this.mcBtn.btInicio.enabled=false;
}

no obtengo resultado, aunque si levanta el valor en un campo de texto dinamico con "estado1" como nombre de variable;
pero si desde flashvars le paso "1" en caso que sea afirmativo y desde flash pregunto:

Código ActionScript :

if(this.estado1==1){
   this.mcBtn.btInicio.gotoAndPlay("over");
   this.mcBtn.btInicio.enabled=false;
}

si, funciona;
tengo que convertir el contenido de la variable estado1 a string?

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Dic 2010 03:17 pm
¡por que será que aparece el último y no el primero? Posiblemente lo esté armando en orden inverso. ¿Que datos tienes? Traza los arrays ...


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2010 03:41 pm
perdon, pero me perdi un poco;
no quiero molestarte pero si tenes un minuto, te paso el estado actual de mi desarrollo, y tal vez lo pueda dejar como estoy buscando dejarlo;

en mi html:

Código HTML :

<param name=FlashVars value="boton=INICIO, home.html, si|CATÁLOGO, catalogo.html, no|CONSEJOS ÚTILES, consejos-utiles.html, no|ASISTENCIA TÉCNICA, asistencia-tecnica.html, no|PUNTOS DE VENTA, puntos-de-venta.html, no|CONTACTO, contacto.html, no">


en mi flash, tengo botones construidos, en los cuales tengo campos de texto dinamicos, cada uno con su nombre de variable, y un campo de texto dinamico donde puedo ver si cargo la variable correspondiente al estado (si, si debe activar el boton, y no, para el caso contrario);
en el primer frame de la pelicula tengo el codigo que te pase anteriormente:

Código ActionScript :

var myString:String=boton;
var myArray:Array=myString.split('|');

for(var i=0; i<myArray.length; i++){
   var arrayTemp0:Array=myArray[0].split(',');
   var arrayTemp1:Array=myArray[1].split(',');
   var arrayTemp2:Array=myArray[2].split(',');
   var arrayTemp3:Array=myArray[3].split(',');
   var arrayTemp4:Array=myArray[4].split(',');
   var arrayTemp5:Array=myArray[5].split(',');
}

//textoX corresponde al campo donde cargo el nombre de la seccion en el boton, funciona OK
this.texto1=arrayTemp0[0];
this.texto2=arrayTemp1[0];
this.texto3=arrayTemp2[0];
this.texto4=arrayTemp3[0];
this.texto5=arrayTemp4[0];
this.texto6=arrayTemp5[0];

//urlX corresponde al campo donde cargo la url de la seccion en el boton, funciona OK
this.url1=arrayTemp0[1];
this.url2=arrayTemp1[1];
this.url3=arrayTemp2[1];
this.url4=arrayTemp3[1];
this.url5=arrayTemp4[1];
this.url6=arrayTemp5[1];

//aqui le quiero indicar al boton si tiene que aparecer activado o no, segun lo que le paso desde flashvars
this.estado1=arrayTemp0[2];
this.estado2=arrayTemp1[2];
this.estado3=arrayTemp2[2];
this.estado4=arrayTemp3[2];
this.estado5=arrayTemp4[2];
this.estado6=arrayTemp5[2];


en el campo de texto dinamico, con nombre de variable 'estado1' y traza correctamente el parametro que carga por flashvars, pero cuando le pregunto:

Código ActionScript :

if(this.estado1=="si"){
   this.mcBtn.btInicio.gotoAndPlay("over");
   this.mcBtn.btInicio.enabled=false;
}

he intentado hacer esto:

Código ActionScript :

this.texto1:String=arrayTemp0[0];

y esto

Código ActionScript :

if(this.estado1.text=="si"){
   this.mcBtn.btInicio.gotoAndPlay("over");
   this.mcBtn.btInicio.enabled=false;
}

pero nada;
no obtengo resultado;
ahora, si en lugar de pasarle '1' en lugar de 'si' desde flashvars, responde perfectamente;
no quiero pecar de pedigüeño, por lo que puedo seguir razonandolo;
pero quisiera saber el motivo, la teoria, por el cual si la variable contiene un numero, me responde y si es string, no y asi poder aprenderlo;

muchas gracias!

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Dic 2010 04:04 pm
No hace falta que me lo expliques 10 veces, sino que trates de razonar lo que te digo. Voy a ser mas claro.
Sospecho que tu array está en orden inverso? ¿Como saberlo? ¿Que sale cuando pones esto (basado en el código que te puse)?

this.texto1=arrayTemp[1];

¿Quizás VENTA?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2010 04:13 pm
ok, te pido disculpas por ser pesado;
no era mi intencion;

cuando hago
this.texto1=arrayTemp[1];

sale UNDEFINED;

me cuesta un poco, pero si, quiero razonarlo; seguire intentando y posteare mi resultado;
muchas gracias!
sebas

Por flashodelico

80 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Dic 2010 05:11 pm
Suponiendo que tuviera boton0 ... boton2, haría esto (hardcodeo el string)

Código ActionScript :

boton="nombre1, seccion1.html, no|nombre2, seccion2.html, no|nombre3, seccion3.html, no"
var myString:String=boton; 
var myArray:Array=myString.split('|'); 
var lista:Array = new Array(); 
var total:Number=myArray.length; 
for(var i=0; i<total; i++){ 
   var arrayTemp:Array=myArray[i].split(','); 
   lista.push(arrayTemp); 
} 

//tengo la estructura de datos, ahora creo y habilito los botones
for(var i:Number = 0; i<lista.length; i++){
   this["boton"+i].texto.text = lista[i][0]
   this["boton"+i].link = lista[i][1]
   this["boton"+i].enabled = lista[0][2];
}


link es una propiedad que me inventé

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2010 06:56 pm
gracias, jorge!
realmente interesante el codigo que me pasas!
lo quiero desmenuzar y entenderlo para poder aplicarlo en mi dia a dia;
por ahora la botonera ya la implementamos de la manera que pude construirla (en lugar de 'si' y 'no' para el estado, utilice '1' y '0', ya que de esa forma me funciona), pero ahora quiero entender el codigo que me pasas, ya que entiendo que es un camino mucho mas limpio y ordenado;

como siempre, un honor ser asistido por vos;
muchas gracias,
abrazo,
sebas.

Por flashodelico

80 de clabLevel



 

firefox

 

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