Comunidad de diseño web y desarrollo en internet online

Como cargar solo un array contenido en una funcion?

Citar            
MensajeEscrito el 01 Mar 2010 01:27 pm
Buenas como estan!! Les escribo primero por ser mi primer post (y como es obvio para preguntar jaja). Tengo una duda con un array que he creado para contener los idiomas de una web. Al hacer el trace dentro de la funcion donde se crea el XML (onLoad para ser exactos), flash me devuelve todos los valores (ejemplo de abajo)

Código ActionScript :

var textoWebXML:XML = new XML();
textoWebXML.ignoreWhite = true;
textoWebXML.onLoad = function()
{
   cargarXMLgenerarArray();
};
function cargarXMLgenerarArray()
{
   var xmlNodoIni:XMLNode = textoWebXML.firstChild;
   var totalNodos:Number = xmlNodoIni.childNodes.length;
   //
   var textoWeb:Array = new Array(totalNodos);
   var i:Number;
   var j:Number;
   for (i = 0; i < totalNodos; i++)
   {
      textoWeb[i] = new Array(xmlNodoIni.childNodes[i].childNodes.length);
      for (j = 0; j < xmlNodoIni.childNodes[i].childNodes.length; j++)
      {
         textoWeb[i][j] =  xmlNodoIni.childNodes[i].childNodes[j].firstChild;
      }
   }
   trace(textoWeb); // Aqui el trace funciona perfecto
   //----------------------------------------
   botonera_mc.proyectos.txt1_txt.text = textoWeb[0][0];
   botonera_mc.empresa.txt1_txt.text = textoWeb[0][1];
   botonera_mc.informes.txt1_txt.text = textoWeb[0][2];
}
textoWebXML.load("idiomas/texto-es.xml");


En cambio si coloco el trace fuera de la función, me da "undefined". (ejemplo de abajo)

Código ActionScript :

var textoWebXML:XML = new XML();
textoWebXML.ignoreWhite = true;
textoWebXML.onLoad = function()
{
   cargarXMLgenerarArray();
};
function cargarXMLgenerarArray()
{
   var xmlNodoIni:XMLNode = textoWebXML.firstChild;
   var totalNodos:Number = xmlNodoIni.childNodes.length;
   //
   var textoWeb:Array = new Array(totalNodos);
   var i:Number;
   var j:Number;
   for (i = 0; i < totalNodos; i++)
   {
      textoWeb[i] = new Array(xmlNodoIni.childNodes[i].childNodes.length);
      for (j = 0; j < xmlNodoIni.childNodes[i].childNodes.length; j++)
      {
         textoWeb[i][j] =  xmlNodoIni.childNodes[i].childNodes[j].firstChild;
      }
   }
   //----------------------------------------
   botonera_mc.proyectos.txt1_txt.text = textoWeb[0][0];
   botonera_mc.empresa.txt1_txt.text = textoWeb[0][1];
   botonera_mc.informes.txt1_txt.text = textoWeb[0][2];
}
textoWebXML.load("idiomas/texto-es.xml");
trace(textoWeb);// Aca ya me da indefinido


La pergunta es, ¿necesito crear nuevamente la variable del XML para poder cargar los datos que este contiene? ¿hay alguna forma de carga los datos una ves y que despues yo llame esa variable desde cualquier sitio (con su ruta correcta porsupuesto) y pueda ubicar los valores que yo quiera?

Espero me hayan entendido..

Muchas gracias por su ayuda!!

Un abrazo!!

Por MartinSanchez

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Mar 2010 04:05 pm
Buno, al parecer me respondi solo jajaja.

El problema era que utilizaba la variable generada "dentro" de la función. Lo que hice fue generar elarray o matriz fuera de la misma y listo. Fin del problema. Para los que tienen el mismo problema les paso el código modificado (aunque no he modificado casi nada :P).

Código ActionScript :

var textoWeb:Array = new Array(); // aca moví la declaración de la matriz (o variable, la matriz en una variable que puede contener muchos datos)
var textoWebXML:XML = new XML();
textoWebXML.ignoreWhite = true;
textoWebXML.onLoad = function()
{
   cargarXMLgenerarArray();
};
function cargarXMLgenerarArray()
{
   var xmlNodoIni:XMLNode = textoWebXML.firstChild;
   var totalNodos:Number = xmlNodoIni.childNodes.length;
   //
   //var textoWeb:Array = new Array(totalNodos);
   var i:Number;
   var j:Number;
   for (i = 0; i < totalNodos; i++)
   {
      textoWeb[i] = new Array(xmlNodoIni.childNodes[i].childNodes.length);
      for (j = 0; j < xmlNodoIni.childNodes[i].childNodes.length; j++)
      {
         textoWeb[i][j] =  xmlNodoIni.childNodes[i].childNodes[j].firstChild;
      }
   }
   //----------------------------------------
   botonera_mc.proyectos.txt1_txt.text = textoWeb[0][0];
   botonera_mc.empresa.txt1_txt.text = textoWeb[0][1];
   botonera_mc.informes.txt1_txt.text = textoWeb[0][2];
}
textoWebXML.load("idiomas/texto-es.xml");
trace(textoWeb); // Este trace (en teoria) deberia funcionar


Dicho esto el código podría quedar así (si no me equivoco). Y ahorramos una función :P

Código ActionScript :

var textoWeb:Array = new Array();
var textoWebXML:XML = new XML();
textoWebXML.ignoreWhite = true;
textoWebXML.onLoad = function()
{
   var xmlNodoIni:XMLNode = textoWebXML.firstChild;
   var totalNodos:Number = xmlNodoIni.childNodes.length;
   //
   //var textoWeb:Array = new Array(totalNodos);
   var i:Number;
   var j:Number;
   for (i = 0; i < totalNodos; i++)
   {
      textoWeb[i] = new Array(xmlNodoIni.childNodes[i].childNodes.length);
      for (j = 0; j < xmlNodoIni.childNodes[i].childNodes.length; j++)
      {
         textoWeb[i][j] =  xmlNodoIni.childNodes[i].childNodes[j].firstChild;
      }
   }
   //----------------------------------------
   botonera_mc.proyectos.txt1_txt.text = textoWeb[0][0];
   botonera_mc.empresa.txt1_txt.text = textoWeb[0][1];
   botonera_mc.informes.txt1_txt.text = textoWeb[0][2];
};
textoWebXML.load("idiomas/texto-es.xml");
trace(textoWeb); // Este trace (en teoria) deberia funcionar


Aparentemente flash ocupa las variables creadas en la funcion solo para la función, no pudiendo acceder a su valor desde otro lugar de la película. En cambio, si se genera dicha variable fuera de la función en cuestión, ésta si puede utilizarse desde cualquier lugar de la película, lo cual es muy bueno porque no se tiene que estar generando la variable cada vez que se necesita.

Espero les haya sido de ayuda!! Este es mi segundo post, aunque ahora no pregunte sino que aporte jajajaja

Un abrazo!!

Por MartinSanchez

1 de clabLevel



 

firefox

 

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