Comunidad de diseño web y desarrollo en internet online

FOR dentro de FOR - XML - FILAS COLUMNAS - ARRAY MULTIDIMENSIONAL

Citar            
MensajeEscrito el 12 Sep 2011 02:39 pm
Estimados, quiero darles las gracias por la ayuda que me dan siempre que la necesito.
En este caso les traigo el siguiente codifo AS lo que hace, o mejor dicho, debería hacer, es cargar un XML y genera una grilla de información.
Trate de explicar todo el código para quien pueda ayudarme le sea mas fácil entenderlo.
Tan solo son dos los problemas que tengo (estos están detallados en el código también):

1- Muestra tan solo una columna de información.
2- No carga los valores de los ARRAYS

No es el XML ya que este funciona de 10 en otro proyecto.

Saludos y espero que alguien pueda darme un mano, realmente lo necesito!

Código ActionScript :

race("Portfolio Frame");
var myXML:XML = new XML();
myXML.load("pruebaXML.xml");
myXML.ignoreWhite = true;
myXML.onLoad = function (success){
   if (success){
      
         grilla = this.firstChild;

                        //Indica la cantidad de maquinas que hay en el XML.
         maquina = grilla.childNodes.length;
         trace("Cantidad de modelos en Base de Datos: " + maquina);

                        //Arrays, contendrán la configuración de cada maquina.
         modelo = new Array(maquina);
         pn = new Array(maquina); 
         ean = new Array(maquina);
         precio = new Array(maquina); 
         color = new Array(maquina); 
         terminacion = new Array(maquina);
         peso = new Array(maquina); 
         medidas = new Array(maquina); 
         origen = new Array(maquina);
         garantia = new Array(maquina); 
         procesador = new Array(maquina); 
         velocidadProcesador = new Array(maquina);
         ram = new Array(maquina); 
         tipoRam = new Array(maquina); 
         VelocidadRam = new Array(maquina);
         hd = new Array(maquina);
         tamanoPantalla = new Array(maquina);
         tipoPantalla = new Array(maquina);
         graficos = new Array(maquina);
         optico = new Array(maquina);
         camara = new Array(maquina);
         buetooth = new Array(maquina);
         wifi = new Array(maquina);
         hdmi = new Array(maquina);
         ethernet = new Array(maquina);
         usb = new Array(maquina);
         lectorTarjeta = new Array(maquina);
         tv = new Array(maquina);
         bateria = new Array(maquina);
         sistemaOperativo = new Array(maquina);
         
                        //Lleno los Arrays con informacion.
         for (i=0; i<maquina; i++) {
               modelo[i] = grilla.childNodes[i].childNodes[0].firstChild.nodeValue;
               trace("Modelo en Base de Datos: " + modelo[i]);
               pn[i] = grilla.childNodes[i].childNodes[1].firstChild.nodeValue;
               ean[i] = grilla.childNodes[i].childNodes[2].firstChild.nodeValue;
               precio[i] = grilla.childNodes[i].childNodes[3].firstChild.nodeValue;
               color[i] = grilla.childNodes[i].childNodes[4].firstChild.nodeValue;
               terminacion[i]= grilla.childNodes[i].childNodes[5].firstChild.nodeValue;
               peso[i] = grilla.childNodes[i].childNodes[6].firstChild.nodeValue;
               medidas[i]= grilla.childNodes[i].childNodes[7].firstChild.nodeValue;
               origen[i]= grilla.childNodes[i].childNodes[8].firstChild.nodeValue;
               garantia[i]= grilla.childNodes[i].childNodes[9].firstChild.nodeValue;
               procesador[i]= grilla.childNodes[i].childNodes[10].firstChild.nodeValue;
               velocidadProcesador[i]= grilla.childNodes[i].childNodes[11].firstChild.nodeValue;
               ram[i] = grilla.childNodes[i].childNodes[12].firstChild.nodeValue;
               tipoRam[i]= grilla.childNodes[i].childNodes[13].firstChild.nodeValue;
               velocidadRam[i] = grilla.childNodes[i].childNodes[14].firstChild.nodeValue;
               hd[i] = grilla.childNodes[i].childNodes[15].firstChild.nodeValue;
               tamanoPantalla[i] = grilla.childNodes[i].childNodes[16].firstChild.nodeValue;
               tipoPantalla[i] = grilla.childNodes[i].childNodes[17].firstChild.nodeValue;
               graficos[i] = grilla.childNodes[i].childNodes[18].firstChild.nodeValue;
               optico[i] = grilla.childNodes[i].childNodes[19].firstChild.nodeValue;
               camara[i] = grilla.childNodes[i].childNodes[20].firstChild.nodeValue;
               buetooth[i] = grilla.childNodes[i].childNodes[21].firstChild.nodeValue;
               wifi[i] = grilla.childNodes[i].childNodes[22].firstChild.nodeValue;
               hdmi[i] = grilla.childNodes[i].childNodes[23].firstChild.nodeValue;
               ethernet[i] = grilla.childNodes[i].childNodes[24].firstChild.nodeValue;
               usb[i] = grilla.childNodes[i].childNodes[25].firstChild.nodeValue;
               lectorTarjeta[i] = grilla.childNodes[i].childNodes[26].firstChild.nodeValue;
               tv[i]= grilla.childNodes[i].childNodes[27].firstChild.nodeValue;
               bateria[i]= grilla.childNodes[i].childNodes[28].firstChild.nodeValue;
               sistemaOperativo[i] = grilla.childNodes[i].childNodes[29].firstChild.nodeValue;
         }

                        //LLamo a la funcion llenarCampos
         llenarCampos();
      }else{
         trace("error al cargar datos en ARRAYS");
          }
}      


//El fin de esta función es crear una grilla donde muestre cada modelo por columna
//y la configuración de cada uno por fila.
//Para esto cree un Array que contendra a los demas arrays creados mas arriba.
//El primer FOR indicara la cantidad de COLUMNAS (= a cantidad de maquinas)
//El segundo FOR indicara la cantidad de FILAS (cantidad de ARRAYS o caracteristicas por maquina )

function llenarCampos(){

campos = new Array("modelo","pn","ean","precio","color","terminacion","peso","medidas","origen","garantia","procesador",
               "velocidadProcesador","ram","tipoRam","velocidadRam","hd","tamanoPantalla","tipoPantalla","graficos","optico",
               "camara","bluetooth","wifi","hdmi","ethernet","usb","lectorTarjeta","tv","bateria","sistemaOperativo");

var _locx= 0;
var _locy= 0;
var a= 0;
var d= 0;

//FOR encargado de las COLUMNAS (en este caso tengo un problema ya que no me muestra mas que una columna pero esto es algo que quiero ver luego).

for(var b:Number = 0; b<maquina; b++){
   
   trace("-----------------------------" + modelo[a] + "-----------------------------")   
   
        //FOR encargado de las FILAS
   for(var c:Number = 0; c<30 ; c++){
   
       //Agrego el movieClip "portField", lo renombro ("celda_" + a + c) 
       //La variable "a" indica el numero de maquina
       //La variable "c" es otra variable que indica el numero del campo en si.
       //Quedando el nombre de cada celda de la grilla celda_00 ... celda029
       //celda_90 ... celda_914 ... celda929

   _root.contiene.attachMovie("portField", "celda_" +a+c, 100+c);
   
        //Posiciono cada celda
   dato = _root.contiene["celda_" +a+c];
   dato._x= _locx * 80;
   dato._y= _locy * 25;
   
   //En esta parte del código INTENTO que se llene cada celda con información de los ARRAYS de arriba (los que poseen la característica de cada maquina)
        //"campo" es el array que contiene a los otros Arrays
        //"d" es una variable que incrementa a medida que se crean las celdas
        //"a" es una variable que incrementa a medida que completamos una columna
        // Si hacemos un trace(campos[d]+"["+a+"]"), veremos que nos dará lo siguiente
        //modelo[0]
   //pn[0]
   //ean[0]
   //precio[0] 
   [size=16]// Es decir nos va dando el nombre de cada ARRAY y la posición. Pero me imprime "modelo[0]" y no el valor que hay en la posicion "0" del ARRAY "modelo"[/size]

   dato.texto.text = (campos[d]+"["+a+"]");
   
   
        //Este IF lo unico que hace es ir incrementando las variables.
   if (d==29){
      ++_locx;
      ++a;
      var d = 0;
      var _locy = 0;
      }else{
      ++_locy;
      ++d
      }
   }
}
}

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Sep 2011 03:48 pm
Hola.
La verdad es que después de ver tu código, parece estar bien, pero me resultaría mucho mas fácil de ver el problema de las filas, teniendo el fla y poniendo mis propios traces que es como encuentro siempre donde se encuentra el error.

Puedes enviármelo a mi email y lo miro: [email protected]

Salu2

Cuae

Por Cuae

29 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Sep 2011 05:00 pm
Alguien mas posee alguna otra opinión?

Dejo los liks para que descarguen los files en cuestión.

http://www.4shared.com/file/VXuzNzDo/pruebaXML.html

Saludos y mil gracias!

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Sep 2011 07:57 am
Hola.

Realmente no le estas pasando datos al texto.text.

Pega estas líneas y ya tienes la idea de lo que tienes que hacer.

Xml = grilla.childNodes[0].childNodes[c].firstChild.nodeValue
_root.contiene["campo_"+a+c].texto.text = (campos[c]+"["+d+"]"+" "+Xml);

Crear todos esos arrays, para mi no son necesarios ya que toda la informacion la tienes en el xml.

Recoje la info. directamente del xml.

Salu2

Cuae

Por Cuae

29 de clabLevel



 

msie8
Citar            
MensajeEscrito el 13 Sep 2011 07:58 am
Otra cosa, dale mayor ancho al texto o autosize, o no te mostrara todo el texto.

Por Cuae

29 de clabLevel



 

msie8
Citar            
MensajeEscrito el 14 Sep 2011 01:57 pm
Tu has logrado que te muestre las variables que poseo en el XML? y la cantidad de columnas correctas?

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Sep 2011 02:06 pm
Con lo que me diste logre ver la info en una columna, pero no logro que se generen las demas faltantes.

Ahora me quedo este código, realmente tenias razón, estaba agregando lineas que no eran necesarias.

Código ActionScript :

trace("Portfolio Frame");
var myXML:XML = new XML();
myXML.load("pruebaXML.xml");
myXML.ignoreWhite = true;
myXML.onLoad = function (success){

   if (success){

         grilla = this.firstChild;
         maquina = grilla.childNodes.length;
         trace("Cantidad de modelos en Base de Datos: " + maquina);
         llenarCampos();
      }else{
         trace("error al cargar datos en ARRAYS");
          }
}      


function llenarCampos(){

var _locx= 0;
var _locy= 0;
var a= 0;
var d= 0;

for(var b:Number = 0; b<maquina; b++){
   
   trace("-----------------------------" + modelo[a] + "-----------------------------")   
   
   for(var c:Number = 0; c<30 ; c++){
   
   _root.contiene.attachMovie("portField", "campo_" +a+c, 100 + c);
   
   dato = _root.contiene["campo_" +a+c];
   
   Xml = grilla.childNodes[0].childNodes[c].firstChild.nodeValue;
   _root.contiene["campo_"+a+c].texto.text = (Xml);
   
   dato._x= _locx * 80;
   dato._y= _locy * 25;
   
   trace("Pocicion campo numero " +a+c + " en X: " + (_locx * 80) + " - en Y: " + (_locy * 25) + "dato " + campos[c]+"["+d+"]");
   
   ++_locy;
   ++d;
   
   }
   
++_locx;
++a;
var d = 0;
var _locy = 0;

}
}
}

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Sep 2011 02:10 pm
Esta linea la modifique asi:


Xml = grilla.childNodes[a].childNodes[c].firstChild.nodeValue;
_root.contiene["campo_"+a+c].texto.text = (Xml);

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Sep 2011 02:33 pm
Entonces para resumir, ya que hice un par de pruebas,

Solo cuento con una columna, el resto de ellas no las veo...

El mc del "texto" se ubica en cualquier lado dentro del mc "contiene"...

Saludos y desde ya mil gracias por darme una mano!

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 17 Sep 2011 06:31 pm
Ya probé montones de cosas y no logro ver mas que una columna!
Please si alguien puede ayudarme se lo agradecería...

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Sep 2011 06:23 pm
Hola.

Dices: Tu has logrado que te muestre las variables que poseo en el XML? y la cantidad de columnas correctas?

La respuesta es si.

Leete de nuevo lo que te respondi anteriormente y repite el ejemplo.

Sobre todo, haz mas anchos los textos ya que no te muestra la info porque no tiene longitud el texto para mostrarla. O ponlos con autosize y te mostrara todo el texto de las columnas.

Ten en cuenta que solo utilizas un texto para insertar los diferentes textos de cada columna.
Debieras de poner un texto por columna.

Cuae.

Por Cuae

29 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Oct 2011 06:36 pm
Volviendo a esto, el único problema que continuo teniendo son las columnas!
Veo la última columna cargada!
Realmente no se que hacer... ya intente de todo!


Código ActionScript :

trace("Portfolio Frame"); 
var myXML:XML = new XML(); 
myXML.load("prueba.xml"); 
myXML.ignoreWhite = true; 
myXML.onLoad = function (success){ 
 
   if (success){ 
 
         grilla = this.firstChild; 
         maquina = grilla.childNodes.length; 
         trace("Cantidad de modelos en Base de Datos: " + maquina); 
         llenarCampos();       }else{ 
         trace("error al cargar datos en ARRAYS"); 
          } 
}       
 
 
function llenarCampos(){ 

var _locx= 0; 
var _locy= 0; 
var a= 0; 
for(var b:Number = 0; b<maquina; b++){
trace("--------------------------------------------------------------------------------------------------------------------");
   for(var c:Number = 0; c<47 ; c++){ 
    
   _root.contiene.attachMovie("campo", "campo_" +a+c, 100 + c); 
    
   dato = _root.contiene["campo_" +a+c]; 
   
   Xml = grilla.childNodes[0].childNodes[c].firstChild.nodeValue; 
   dato.texto.text = (Xml); 
   
   dato._y= _locy * 25; 
   dato._x= _locx * 109;
    
   trace("Pocicion campo numero " +a+c + " en X: " + (_locx * 109) + " - en Y: " + (_locy * 25) + " - dato cargado en campo= " + Xml); 
   trace(_locx);
 
   
   // -- ruptura de control, control de número de columnas
   if (_locy == 46) {
   _locy = 0;
      ++_locx;
   }else{
   ++_locy;
   }
  } 
 ++a;
}
}

Por PX10

70 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Oct 2011 06:48 pm
Respondiendole a Cuae

Veo la info que poseo en el XML
El campo de texto dinamico lo hice mas grande
Lei nuevamente todo lo que me indicaste

Pero aun conitnuo viendo tan solo una columna y no 3 como deberia mostrarte.

ARCHIVOS EN EL LINK DE ABAJO
www.satandbypc.com.ar/pruebas.zip

Saludos y muchas gracias!

Por PX10

70 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Oct 2011 11:54 pm
Dejo la ultima actualizacion del codigo, sigo viendo una columna y no todas!


CODIGO AS

Código ActionScript :

var myXML:XML = new XML();
myXML.load("prueba.xml");
myXML.ignoreWhite = true;
myXML.onLoad = function(success)
{

   if (success)
   {

      grilla = this.firstChild;
      maquina = grilla.childNodes.length;
      trace("Cantidad de modelos en Base de Datos: " + maquina);
      var _locx = 0;
      var _locy = 0;
      var a = 0;
      for (var b:Number = 0; b < maquina; b++)
      {
         for (var c:Number = 0; c < 47; c++)
         {

            _root.contiene.attachMovie("cuadradito","campo_" + a + c,100 + c);

            dato = _root.contiene["campo_" + a + c];

            Xml = grilla.childNodes[0].childNodes[c].firstChild.nodeValue;

            if (dato.texto.text = (Xml) == undefined)
            {
               dato.texto.text = "---";
            }
            else
            {
               dato.texto.text = (Xml);
            }

            dato._y = _locy * 25;
            dato._x = _locx * 109;

            trace("Pocicion campo numero " + a + c + " en X: " + (_locx * 109) + " - en Y: " + (_locy * 25) + " - dato cargado en campo= " + Xml);
            trace(_locx);

            if (_locy == 46)
            {
               _locy = 0;
               ++_locx;
            }
            else
            {
               ++_locy;
            }
         }
         ++a;
      }
   }
   else
   {
      trace("error al cargar datos en ARRAYS");
   }
};

Por PX10

70 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Oct 2011 12:36 am
Alguien tiene alguna idea?

Por PX10

70 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Oct 2011 10:44 pm
Solucionado!

Por PX10

70 de clabLevel



 

chrome

 

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