Opa, o problema é adicionar uma dependencia na minha lib =/

Mas eu fiz algo que funcionou muito bem:


var description:XML = describeType(this);

var list:XMLList = description.child("accessor");

for (var i:int;i<list.length();i++)
{
    var s:String = list[i].@name;
    try
    {
        var btn:Button = this[s] as Button;
        Alert.show("aha! um botão encontrado:"+btn.id);
    }catch(e){}
}


Valeu, galera!

On Jan 27, 11:33 am, Daniel Rodrigues da Cunha Frank
<fr...@projetusinformatica.com.br> wrote:
> Herberth,
>
> Para reflexão em AS3 eu tenho utilizado a* Reflection API* do Spicelib 
> (http://www.spicefactory.org/).
> Inclusive essa foi uma dica que encontrei no finado blog do Mário Junior.
> Att.,
>
> *Daniel R. C. Frank, **Analista de Sistemas, Projetus Informática*
>
> Tel: (32) 2101-6400                         *
> fr...@projetusinformatica.com.br  *|www.projetusinformatica.com.br [image:
> Twitter] <http://www.twitter.com/projetus> <http://www.twitter.com/projetus>
>
> <http://www.twitter.com/projetus>
> <http://www.twitter.com/projetus>
>
> <http://www.projetusinformatica.com.br/>
>
> Em 27 de janeiro de 2011 09:59, Mário Júnior <juninho...@gmail.com>escreveu:
>
>
>
>
>
>
>
> > O famoso  "for in" para descobrir atributos de objetos só funciona com
> > Object criados dinamicamente, em tempo de execução, e sem tipagem forte.
>
> > Por exemplo:
>
> > var p : Object = new Object(); //ou var p : Object = {nome: 'Mario', idade:
> > 27};
> > p.nome = "Mario"
> > p.idade = 27
>
> > for (var atributo:String in p) {
> >    trace (atributo + ": " + p[atributo]);
> > }
>
> > Isso funciona!! Agora, se eu tiver uma classe Pessoa, e eu instanciar um
> > objeto dessa classe (fortemente tipado), não funciona:
>
> > var p : Pessoa = new Pessoa();
> > p.nome = "Mario"
> > p.idade = 27
>
> > for (var atributo:String in p) {
> >    //nesse caso, nem entra no for :(
> >    trace (atributo + ": " + p[atributo]);
> > }
>
> > Sendo assim, a UNICA maneira é usando describeType()
>
> > var described:XML = describeType(p);
>
> > //described.variable retorna um XMLList
> > for each (var variable:XML in *described.variable*) {
> >     var attr:String = variable.@name;
> >     trace(attr + ": " + p[attr]);
> > }
>
> > Se sua classe tiver atributos PUBLICIOS, entao vc usa o "*variable*" no
> > describeType para acessar as variaveis.
> > Agora, se sua classe for de atributos PRIVADOS com getter e setter, então
> > vc usa *described.accessor*
>
> > *Agora: Cuidado com a pegadinha do Sérgio Malandro!!!*
> > *
> > *
> > *Se sua classe só tiver atributos PUBLICOS, mas conter a metadata
> > [BINDABLE] encima dela, *o mxmlc (Compilador do Flex) irá 'transcrever'
> > sua classe para atributos privados com getters e setters ANTES DE GERAR o
> > swf (em processo de compilação - compile time) ... portanto, vc só poderá
> > usar o *described.accessor *para acessar os atributos em runtime, enquanto
> > o described.variables nao retorna nada (no caso, nem entra no for acima).
>
> > Links importantes:
> >http://bit.ly/ffGT8h
> >http://bit.ly/fr5Ln5
>
> > YEAH - YEAH!!
>
> > []'s
>
> > Em 27 de janeiro de 2011 09:27, Herberth Amaral 
> > <herberthama...@gmail.com>escreveu:
>
> > Olá pessoal,
>
> >> Estou desenvolvendo uma lib e preciso utilizar os recursos de
> >> reflection do ActionScript3 para pegar todos os objetos (especialmente
> >> widgets) de uma aplicação/módulo/componente. Tentei utilizar o for ..
> >> in, for each .. in e o describeType para me retornar ao menos o ID,
> >> mas ele nem ao menos entra no loop.
>
> >> Alguem tem alguma sugestão?
>
> >> P.S: tou usando o flex 3 pra testar.
>
> >> --
> >> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> >> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
> >> Para sair da lista, envie um email em branco para
> >> flexdev-unsubscr...@googlegroups.com
> >> Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev
>
> > --
> > Mario Junior
> >http://blog.mariojunior.com/
> > @mariojunior
>
> > --
> > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> > Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
> > Para sair da lista, envie um email em branco para
> > flexdev-unsubscr...@googlegroups.com
> > Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev

-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a