Comunidad de diseño web y desarrollo en internet online

¿Problema con ambito de variables?

Citar            
MensajeEscrito el 26 May 2006 08:49 pm
Buenas (de nuevo). A ver mi problema es que no entiendo por que el trace del siguiente código devuelve Undefined:

Código :

var gal:Gallery=new Gallery();

var   xmlData:XML=new XML();
xmlData.ignoreWhite=true;
xmlData.load("gallery1.xml");

xmlData.onLoad=function(ok){
   if(ok){
      gal.setName(xmlData.firstChild.childNodes[3].attributes.title);
      gal.setDesc(xmlData.firstChild.childNodes[3].attributes.description);
      gal.setImages(xmlData.firstChild.childNodes[3].childNodes);}
   else{
      trace("Error loading XML");}
   }
trace(gal.getDesc());


Gallery, es una clase que me he creado yo, que simplemente sirve de contenedor de los datos que extraigo del xml, no tiene más que tres atributos y los métodos get/set correspondientes.

Pego también el código de la clase, por si hubiera algo mal, aunque Flash no me dice nada.

Código :

class Gallery
{
   private var name:String;
   private var description:String;
   private var imagesList:Array;
   //constructor
   function Gallery(name:String, desc:String, images:Array)
   {
      this.name=name;
      this.description=desc;
      this.imagesList=images;
   }
   //get methods
   function getName():String{
      return this.name;}
   function getDesc():String{
      return this.description;}
   function getImages():Array{
      return this.imagesList;}
   //set methods
   function setName(name:String){
      this.name=name;}
   function setDesc(desc:String){
      this.description=desc;}
   function setImages(imgList:Array){
      this.imagesList=imgList;}
}

Por Cybrid

30 de clabLevel



Genero:Masculino  

Bilbao (Spain)

firefox
Citar            
MensajeEscrito el 26 May 2006 10:00 pm
Estas haciendo la llamada al método y aun no se ha terminado de cargar el xml. Introduce el trace dentro del onLoad y tendría q funcionarte.

Un saludo.

Por Anturiel

8 de clabLevel



Genero:Masculino  

LPGC

firefox
Citar            
MensajeEscrito el 26 May 2006 10:11 pm
Gracias, ahora funciona, pero me surge la siguiente duda. Si tengo que esperar a que el xml se cargue para poder usar las variables del objeto Gallery, como puedo saber cuando ha cargado?

Por Cybrid

30 de clabLevel



Genero:Masculino  

Bilbao (Spain)

firefox
Citar            
MensajeEscrito el 26 May 2006 10:22 pm
La clase XML tiene la propiedad loaded que te devuelve true cuando se ha cargado el xml.

Por Anturiel

8 de clabLevel



Genero:Masculino  

LPGC

firefox
Citar            
MensajeEscrito el 26 May 2006 10:33 pm
Ok, muchisimas gracias :D

Por Cybrid

30 de clabLevel



Genero:Masculino  

Bilbao (Spain)

firefox
Citar            
MensajeEscrito el 26 May 2006 11:03 pm
Err perdon, una consultilla mas. Cuando atacheo un MC a _root. que evento se lanza? <onLoad>? <onClipEvent>?<on......>?

Por Cybrid

30 de clabLevel



Genero:Masculino  

Bilbao (Spain)

firefox
Citar            
MensajeEscrito el 27 May 2006 07:07 am
Ni a la de tres, nada, que no consigo que funcione, y ya he probado todo lo que se me ha ocurrido, alguna idea de porqué no funciona esto?

Básicamente debería ser bastante simple. Simplemente lleno el objeto Gallery con los datos del xml, luego atacheo el MC(gBox) que contiene una caja de texto dinámico y cargo en esa caja los datos del objeto Gallery.

Código :

stop();
var gal:Gallery=new Gallery();

var   xmlData:XML=new XML();
xmlData.ignoreWhite=true;
xmlData.load("gallery1.xml");

xmlData.onLoad=function(ok){
   if(ok){
      gal.setName(xmlData.firstChild.childNodes[3].attributes.title);
      gal.setDesc(xmlData.firstChild.childNodes[3].attributes.description);
      gal.setImages(xmlData.firstChild.childNodes[3].childNodes);
      }
   else{
      trace("Error loading XML");}
   }

listener=new Object();
_root.attachMovie("gBox","gBox1",getNextHighestDepth());
_root.gBox1.addEventListener(listener);
listener.onLoad=function(){
   if(xmlData.loaded){
      trace(gal.getName());
      _root.gbox1.galDesc_txt.text=gal.getDesc();
      trace(gal.getImages());
      }
}

Por Cybrid

30 de clabLevel



Genero:Masculino  

Bilbao (Spain)

firefox
Citar            
MensajeEscrito el 28 May 2006 02:01 am
Para hacer lo que queire no te hace faltan listener ni ningún evento. Con algo tal que así te vale:

_root.attachMovie("gBox","gBox1",getNextHighestDepth());
_root.gbox1.galDesc_txt.text=gal.getDesc();

Un Saludo.

Por Anturiel

8 de clabLevel



Genero:Masculino  

LPGC

firefox

 

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