Comunidad de diseño web y desarrollo en internet online

alcanze (scope) de arrays

Citar            
MensajeEscrito el 17 Jul 2008 07:36 pm
Hola chicos.

Intento rellenar el array con los datos que vienen de un fichero xml exactamente como sale en el codigo abajo, y me rellena correctamente (hago un trace que devolve los datos que espero).

Código :

var galleryXML:XML = new XML();
galleryXML.ignoreWhite = true;
galleryXML.load("photos.xml");

var photos:Array = new Array();
var i:Number;

galleryXML.onLoad = function(success) {
   if(success){
      totalFotos = galleryXML.firstChild.childNodes.length; 
      for(i = 0; i<totalFotos; ++i){
         photos.push({anchura: galleryXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue, 
                     altura: galleryXML.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue,
                   enlace: galleryXML.firstChild.childNodes[i].childNodes[2].firstChild.nodeValue
                   });
         
            
      }
   } else {
      errorTextField.text = "Error: Fichero XML no se ha cargado";
   }
   trace("total"+photos.length);
   for (i = 0; i < photos.length; ++i){
      trace(photos[i].anchura);trace(photos[i].altura);trace(photos[i].enlace);
   }
}


Pero luego fuera de la funcion cuando llamo a este array me sale vacio!.
Justo debajo de funciton hago el mismo bucle for con trace

Código :

trace("total"+photos.length);
   for (i = 0; i < photos.length; ++i){
      trace(photos[i].anchura);trace(photos[i].altura);trace(photos[i].enlace);
   }

y me sale que longitud (photos.length) es 0 y logicamente no me hace de mas trace.

Me pregunto porque el array se llena correctamente dentro de la funcion, pero una vez fuera de ella esta vacio?

Necesito este array photos para crear una galeria y veo que me escapa algo fundamental.

Gracias a todos!

Por skywalker

28 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 17 Jul 2008 08:19 pm
Bueno tomé tu código y lo remplacé por un XML mio, cambié el código, pues mis datos son diferentes y me funciona, el segundo ciclo me dice los valores dentro del arreglo. Me parece que el problema es tu XML ya que probé con tu mismo código.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Jul 2008 06:51 am
Este es mi photos.xml

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<photos>
<photo>
<width>240</width>
<height>200</height>
<url>pics/club/small/1.jpg</url>
</photo>
<photo>
<width>200</width>
<height>220</height>
<url>pics/club/small/2.jpg</url>
</photo>
<photo>
<width>200</width>
<height>280</height>
<url>pics/club/small/3.jpg</url>
</photo>
</photos>

Estos datos con function trace se muestran correctamente dentro de la funcion onload, pero fuera de la funcion el array queda vacio.

Por skywalker

28 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 18 Jul 2008 08:28 am
Claro, ya veo que te pasa, solamente puedes ver lo que hay dentro del arreglo cuando el XML se haya cargado porque sino no hay manera, si pones el trace fuera del onLoad el flash tratará de buscar datos dentro del arreglo y el XML todavía se está leyendo.

Lo que vayas a realizar con el arreglo debes hacerlo después que el XML se cargue, ese es el punto de partida de todo tu trabajo

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Jul 2008 09:04 am
Gracias.
Pense que ejecuta el codigo linea por linea. O sea que una vez que ejecuta la funcion onload se debe tener ya rellenado el array desde cualquer punto de la pelicula. Por que la funcion si se ejecuta ya que el trace dentro si lo hace. Y si hace el trace es que llega hasta alli.
Si llega hasta ejecutar la funcion, llena el array logicamente.
Ademas el xml seguro que se ha cargado porque tercera linea es galleryXML.load("photos.xml");

Eso me confunde bastante.

Por skywalker

28 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 18 Jul 2008 12:25 pm
pues flash procesa miles de líneas en un tiempo extremadamente corto, el envía a leer el XML pero rapidamente analiza el siguiente código fuera del onload.

Lo que te recomiendo es que después que se lea el XML entonces comienza a hacer lo demás, si no quieres complicarte y no utilizar clases o funciones pon en el primer frame la lectura del XML y cuando se carge dale play a la película y en los demás frames ten los demás códigos.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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