Bem Daniel, realmente não pode fazer isso....  A solução seria por
itemRenderer ou labelFunction. Já comentei sobre o uso de um (itemRenderer)
ou outro (labelFunction) na lista flex-brasil, se quiser dar uma olhada leia
aqui:

http://br.groups.yahoo.com/group/flex-brasil/message/12259

Então, a solução vc já sabe, mas melhor do saber a solução, é compreender do
*porquê* vc não pode fazer como gostaria (Acessar objetos encapsulados
diretamente na declaração do dataField) e eu já até expliquei em outro
e-mail, mas por incrível q pareça a busca do gmail não encontrou... então
vou dar uma pincelada "rápida" aqui na explicação, e como exemplo vou usar o
<mx:DatagridColumn /> que é usado no <mx:Datagrid /> e tem implementação
básica ao <mx: AdvancedDatagridColum />

##################
Este post pode se tornar comprido devido a explicação
###################

Veja só Daniel, abra o fonte da classe DataGridColumn.as (ctrl+click na
tag), vá até a linha 1404 e encontrará um método (função) com o nome de *
itemToLabel*(data : Object) que retorna uma String.

Agora, vendo sua implementação, atente-se para a linha 1419 onde ocorre-se
isso:

....
data = data[dataField]
....

*dataField *é uma string e representa o nome da propriedade q vc informou lá
no mxml, lembra? <mx:DatagridColumn dataField="*Pessoa.Endereco*" />

Perceba outra coisa interessante: o uso de acesso a atributos (propriedades
do objeto) por meio de colchetes ( objeto["atributo"] )

Agora que já sabemos como uma propriedade é renderizada na coluna, vamos
tentar visualizar a fonte do seu problema:

Tente visualizar o seguinte objeto:
var pessoa : Pessoa = new Pessoa();

pessoa.nome = "Mário"
pessoa.idade = 24
pessoa.*contato*.email = "[EMAIL PROTECTED]"
pessoa.*contato*.blog = "blog.mariojunior.com"

Se vc escrever em uma coluna isso: <mx:DatagridColumn dataField="*nome*"/>
Internamente, o componente - para renderizar o atributo "nome" - fará isso
lá na linha 1419:

....
data = data["nome"]; //data é o seu objeto atual, a "pessoa" em questão
....

Logo isso vai retornar o valor "Mário" corretamente naquela célula da
coluna.


Agora, se vc fizer:
<mx:DatagridColumn dataField="*contato.email*"/>, internamente, o componente
vai tentar fazer:
....
data = data["*contato.email*"];
....

E isso vai dar erro, pq não existe atributo "contato.email" ... oq existe é
um atributo "contato" e dentro dele - encapsulado - existe *outro
atributo*chamado "email"... logo, a maneira certa de acessar esse
atributo é:

data = data["contato"]["email"] // Aqui sim, o resultado seria o esperado.

Mas como a implementação do componente não espera esse tipo de situação
(objetos encapsulados), as maneiras de "contornar" essa situação é passar a
responsabilidade para um itemRenderer ou um labelFunction, como vc fez.

Assim, eu espero q você - além de saber a solução - saiba também o motivo de
ter recorrido a esses caminhos (labelFunction ou itemRenderer).


No mais, um forte abraço e desculpa o texto looooongo...



-- 
Mário de Souza Júnior
Programador Java / Adobe Flex
(44) 4009-3550 Maringá-PR
http://blog.mariojunior.com
[EMAIL PROTECTED] (gtalk, msn, etc..)

--~--~---------~--~----~------------~-------~--~----~
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