ehehehe ... pow.. vc matou meu blog :P é, mas reconheço q está parado mesmo... agora q estou trocando de servidor (indo para Zion) a coisa vai voltar a pegar fogo.
Mas de fato, é bom usar essas libs de reflexao... no final de tudo elas usam sempre o describeType(), mas pelo menos já dão as coisas "mastigadas" e bem + facil. []'s Em 27 de janeiro de 2011 11:33, Daniel Rodrigues da Cunha Frank < [email protected]> escreveu: > 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 * > [email protected] *| 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 <[email protected]>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 <[email protected] >> > 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 [email protected] >>> Para sair da lista, envie um email em branco para >>> [email protected] >>> 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 [email protected] >> Para sair da lista, envie um email em branco para >> [email protected] >> Mais opções estão disponíveis em http://groups.google.com/group/flexdev >> > > -- > Você recebeu esta mensagem porque está inscrito na lista "flexdev" > Para enviar uma mensagem, envie um e-mail para [email protected] > Para sair da lista, envie um email em branco para > [email protected] > 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 [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev
