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 em http://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 em http://groups.google.com/group/flexdev

Reply via email to