Comunidad de diseño web y desarrollo en internet online

de nuevo problemas con el valor de una variable en una clase

Citar            
MensajeEscrito el 22 Nov 2006 12:57 am
saludos, tengo de nuevo un problema con una variable, ya que me manda "undefined", ya lei el post de zah "ambitos de variables" pero no parece funcionar lo que he intentado, basicamente es una galeria de thumbnails, las cuales los cargo mediante MovieClipLoader, al seleccionar uno de los thumbnails te debe abrir la imagen en grande, nada nuevo, el problema es que no puedo accesar a ese valor.

gracias!!!!

aqui esta el codigo

class Galeria {
//Propiedades
private var que:String;
private var width:Number;
private var height:Number;
private var thumbContainer_mc:MovieClip;
private var imageContainer_mc:MovieClip;
private var target_mc:MovieClip;
private var thumbs:Array = new Array();
private var images:Array = new Array();
private var tLoader:MovieClipLoader;

//constructor
public function Galeria(target:MovieClip, numero:Number, x:Number, y:Number, w:Number, h:Number) {

tLoader = new MovieClipLoader();
target_mc = target;
tLoader.addListener(this);
creaGaleria(numero, x, y, w, h);
}
private function creaGaleria(numero:Number, depth:Number, x:Number, y:Number, w:Number, h:Number):Void {
var n:Number
for (var depth = 0; depth<numero; depth++) {

thumbContainer_mc.n=depth //////CREO UNA VARIABLE N

///aqui llenamos los arrays
images[depth] = ("foto"+depth+".jpg");
thumbs[depth] = ("thumb"+depth+".jpg");
trace(thumbs[depth]);
///y asignamos dinamicamente un mc de la libreria

thumbContainer_mc = target_mc.attachMovie("cub", "cube"+depth, depth);
thumbContainer_mc._width = w;
thumbContainer_mc._height = h;
thumbContainer_mc._x = x;
thumbContainer_mc._y += 120*depth;
///cargamos los mc con los thumbnails
tLoader.loadClip(images[depth],thumbContainer_mc)
}
}

public function onLoadComplete(target:MovieClip):Void {

target.onRollOver = function() {
this._alpha = 60;
};
target.onRollOut = function() {
this._alpha = 100;
};
target.onRelease = function() {
trace(this.n)///////////////AQUI SALE UNDEFINED
carga(this.n)
};

}

private function carga(que:String):Void {
imageContainer_mc = target_mc.createEmptyMovieClip("contenedor_mc", 100);
imageContainer_mc._x = 300;
imageContainer_mc.loadMovie(que)
}

}

Por mausetum

2 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Nov 2006 02:47 am
Hola!... deberias leer de nuevo el post de "Ambitos de Variables"
www.cristalab.com/foros/viewtopic.php?p=203247&sid=c99db38ef8295be742f196f8cb0121d5
Mas Precisamente todo lo que vincula a la clase Delegate.

Anonymous escribió:

Bueno, hablemos de la clase Delegate.

La clase Delegate es una solución que propuso Mike Chambers para solucionar este problema de ámbito de los Callbacks al trabajar con clases.
Consiste en "delegar" la función del callback en una funcion de la clase, de la siguiente manera:

Código :

falsoXML.onLoad = Delegate.create(this, onLoadXML);

Esto seria similar a hacer:

Código :

falsoXML.onLoad = onLoadXML

con la importante diferencia de que con la clase Delegate , el ambito de la función onLoadXML() es el de la propia clase y no el del objeto falsoXML, con lo que podrenmos acceder sin problemas a las variables de la clase.

Scope:

Código :

class Prueba {
   var hi = "hallo";
   function Prueba() {
   }
   function cargarXML() {
      var falsoXML:XML = new XML();
      falsoXML.load("grfx.xml");
      var scope = this;
      falsoXML.onLoad = function() {
         trace(this.hi);   //undefined
         trace(scope.hi); //hallo. Así sí funciona
      };
   }
}

Delegate:

Código :

import mx.utils.Delegate;
class Prueba {
   var hi = "hallo";
   function Prueba() {
   }
   function cargarXML() {
      var falsoXML:XML = new XML();
      falsoXML.load("grfx.xml");
      falsoXML.onLoad = Delegate.create(this, onLoadXML);
   }
   function onLoadXML() {
      trace(this.hi);   //hallo. Así sí funciona
   }
}

Espero que te sirva, no he probado tu codigo....
Saludos!

Por mansonet

30 de clabLevel



Genero:Masculino  

Argentina

firefox

 

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