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

Responder a