Bueno.. Si y no....

        Para componentes, no puedo opinar, porque ya sabes que "no gasto" ;)

        Veamos, para la clase XML con el ejemplo que tu propones...

        Si hago:

class ExtendXML extends XML {
        public var onLoad_evnt:Function = new Function();
        function ExtendXML() {}
        public function onLoad(sucess_bol:Boolean) {
                this.onLoad_evnt(sucess_bol, this);
        }
}

        Esa clase funciona, y tienes una referencia tanto de la clase como
de si hubo o no éxito en la carga del xml...

        Ahora, claro, para que tu clase reciva el "evento", ya es otra
historia.. Habría que usar un addEventListener, y todo el tema, y no tengo
claro que funcione con la clase XML...

        Vamos, que realmente me parece un remiendo que ha hecho Macromedia,
en vez de modificar la clase inicial XML, para que te devuelva directamente
una referencia de si misma y aparte tengo un método/propiedad para saber si
tubo o no éxito la carga, que me parece mucho más lógico que no devolver un
éxito true/false directamente...

        Pero bueno, ellos sabrán porqué lo hacen así...

        Un saludo :)

        PS: y bueno, si sabes el porqué lo hacen así, yo encantado de que me
lo cuentes jejejeje
 

> -----Mensaje original-----
> De: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] En nombre de Joseba Alonso
> Enviado el: miércoles, 20 de julio de 2005 0:05
> Para: [email protected]
> Asunto: RE: [ASNativos] salu2 ( Clase 'Delegate' )
> 
>  
> >     Pero, realmente, ¿no sería mejor que cada clase tenga 
> > sus eventos asociados y exista una buena jerarquía de 
> > eventos, sin tener que recurrir a un proxy de eventos como en 
> > realidad es esto?
> 
> Desde luego, pero flash tiene muchos eventos que no cumplen unas
> expectativas minimas, como MovieClip o XML. Yo lo uso para 
> eso. La tipica
> clase...
> 
> import mx.utils.Delegate;
> class DataObject{
>       private var xml:XML;
>   
>       public function DataObject(){
>               xml = new XML();
>               xml.ignoreWhite = true;
>               xml.onLoad = Delegate.create(this,handleXML);
>       }
>       public function handleXML(ok:Boolean){
>               if(ok)parse();
>       }
>       public function load(url:String){
>               xml.load(url);
>       }
>       // protected abstract
>       private function parse(){};
> }
> 
> Sino usas el delegate tienes 2 opciones. Las 2 con pegas.
> 1- Meter una referencia a lo bestia en xml:
>       xml["ref"] = this;
>       xml.onLoad = function(){
>               this["ref"].handleXML();
>       }
> 
> Que es un hack mas que otra cosa.
> 
> 2- Crear una variable local y aprobecharse de que no se destruirá.
>       var ref:DataObject = this;
>       xml.onLoad = function(){
>               ref.parse();
>       }
> 
> Que esta mejor, pero el resto de variables locales que 
> definas en la funcion
> tambien se vuelven permantentes y tienes que estar pendiente 
> de eso, sobre
> todo si generas muchas instancias de esa clase.               
> 
> Tambien es muy util con el EventDispatcher de los componentes que solo
> aceptan una funcion o un objeto como parametro. Si quieres 
> una funcion sin
> restricciones de nombre y en el ambito que te de la gana en 
> un componente
> solo lo puedes hacer con el Delegate. Que es para lo que lo 
> venia usando.
> Pero tambien sirven con los callbacks de toda la vida, donde 
> tampoco podias
> elegir el ambito de ejecucion.
> 
> 
> Mmm.. No se, ¿Te he convencido? :D
> 
> Joseba Alonso
> www.5dms.com
> www.sidedev.net 
> 
> 
> 
> ----------------------------------
> Lista ASNativos:[email protected]
> http://www.5dms.com/listas
> ----------------------------------


----------------------------------
Lista ASNativos:[email protected]
http://www.5dms.com/listas
----------------------------------

Responder a