Sim, tem q ter getters e setters para que o acessor via [ ] (colchetes) funcione... OU ... pode deixar os atributos public diretamente. (Essa questao de getters/setters em VOs no AS3 é um pouco relativa. Se vc precisa do VO só para transportar dados, pra q precisa de getters/setters? Vc por acaso vai validar alguma informação no setter, ou ainda executar alguma lógica no getter? http://www.jamesward.com/2010/05/07/flex-and-java-differences-getters-setters/ )
Faça o mesmo teste que sugeri antes, coloque um breakpoint na primeira linha do método e verifique oq está sendo passado como argumento no "item". A propósito, vc fez o teste anterior? Verificou se taskGroupDomain realmente tem uma description válida? (ps: nao tenho certeza, na verdade nao lembro, mas acho q labelFunctions requer q o método seja public... mas realmente nao lembro de cabeça agora, tenta aí). Sobre sua pergunta anterior, sim: vc pode usar o Flex 3.5 SDK e continuar com o Flex Builder 3 normalmente. Assim como, vc também pode usar o Flash Builder 4 (a nova IDE) e desenvolver com Flex 3.5 SDK (eu estou fazendo isso, mas ressalto q a compilação é para o Flex 3.5 e nao para Flex 4 com componentes Halo). []s Em 26 de maio de 2010 14:34, Sérgio Fantin <[email protected]>escreveu: > Olá Mário, > > gostei muito da explicação! Me ajudou muito e tenho certeza que vai ajudar > outras pessoas que estão iniciando com Flex. > > Só uma coisa... optei pela terceira dica: > > 3) caso vc nao queira "sujar" seus VOs com esses getters... > > Coloquei o método no meu mxml pra testar: > > private function propChainLabelFunction(item:Object, > column:DataGridColumn):String { > var currentItem:Object = item; > var chain:Array = column.dataField.split("."); > for each (var prop:String in chain){ > currentItem = currentItem[prop]; > } > return currentItem.toString(); > } > > No grid: > > <mx:DataGridColumn headerText="Tarefa Agendada" id="taskSchedule" > dataField="taskGroupDomain.description" > labelFunction="propChainLabelFunction"/> > > Mas não funfou. Acontece uma coisa interessante... quando eu retiro a > labelFunction="propChainLabelFunction" > minha grid funciona quase toda, só a coluna id="taskSchedule" não é > preechida. Mas quando eu deixo com a labelFunction parece que a tela para de > funcionar... nem as imagens aparecem. Não entendi porque isso ocorre. > Uma dúvida... os atributos das minhas classes envolvidas têm que ter > gets/sets? > > > 2010/5/26 Sérgio Fantin <[email protected]> > > O meu SDK tá na versão 3.2. Eu posso fazer o upgrade pra versão 3.5 e >> continuar com o Flex Builder 3? >> >> 2010/5/26 Mário Júnior <[email protected]> >> >> Desculpa... tab e espaço na hora errada =D >>> Reescrevendo a msg anterior: >>> ---- >>> >>> Acho q não é isso nao @Guilherme, parece q o acesso dele está certo. >>> >>> @Sergio, coloca o breakpoint nessa linha: >>> >>> var obj:TaskDomain = row as TaskDomain; >>> e veja pela aba "Variables" se o "obj" possui um * >>> taskGroupDomain.description* >>> só para desencargo de consciencia verifica isso. >>> >>> >>> >>> Agora, algumas dicas: >>> >>> 1) Se vc usa Flex SDK 3.5, vc pode declarar esse campo diretamente no >>> dataField="taskGroupDomain.description" >>> Mas ressalto q isso só funciona no 3.5 pra frente. >>> >>> 2) Usar um simples getter como decorator/helper/wrapper (tem gente q usa >>> nome pra tudo nisso) na sua classe TaskDomain que já retorne essa >>> description para vc: >>> >>> public class TaskDomain { >>> >>> .... >>> >>> >>> private var _taskGroup:TaskGroupDomain; >>> >>> public function get taskGroupDomain():TaskGroupDomain { >>> return _taskGroup; >>> } >>> >>> //Helper / Wrapper / Decorator >>> public function get taskGroupDescription():String{ >>> >>> return (_taskGroup != null) ? _taskGroup.description : >>> "grupo nao disponivel"; >>> } >>> >>> e daí no dataField do column vc coloca dataField="taskGroupDescription" >>> >>> >>> 3) caso vc nao queira "sujar" seus VOs com esses getters, e caso NAO >>> esteja usando o Flex SDK 3.5 mas gostaria de usar nested objects no >>> datafield, pode usar ainda essa dica do Beck: >>> http://groups.adobe.com/people/43722/profile >>> >>> Daí vc pega a propChainLabelFunction e coloca ela em alguma classe >>> "utils" da vida, e no seu datagrid colum declare: >>> dataField="taskGroupDomain.description" >>> labelFunction="{UtilClass.propChainLabel}" >>> >>> >>> >>> Enfim, são 3 dicas basicas só pra evitar de q vc tenha vários >>> labelsFunctions espalhados pelo seu mxml. >>> >>> >>> []s >>> >>> * >>> * >>> >>> >>> >>> >>> >>> >>> Em 26 de maio de 2010 13:27, Mário Júnior <[email protected]>escreveu: >>> >>> Acho q não é isso nao Guilherme, parece q >>>> >>>> Coloca o breakpoint nessa linha: >>>> >>>> var obj:TaskDomain = row as TaskDomain; >>>> >>>> Em 26 de maio de 2010 12:52, Guilherme Sjlender >>>> <[email protected]>escreveu: >>>> >>>> Muda... >>>>> >>>>> return obj.taskGroupDomain.description; >>>>> >>>>> para >>>>> >>>>> return obj.description; >>>>> >>>>> Pois o obj é a classe TaskDomain >>>>> >>>>> Att. >>>>> Em 26 de maio de 2010 12:33, Sérgio Fantin < >>>>> [email protected]> escreveu: >>>>> >>>>> Estou tentando exibir a descrição, mas não estou tendo muito sucesso: >>>>>> >>>>>> >>>>>> protected function *labelFunctionTaskGroupDescription*(row:Object, >>>>>> column:DataGridColumn):String { >>>>>> var obj:TaskDomain = row as TaskDomain; >>>>>> >>>>>> return obj.taskGroupDomain.description; >>>>>> } >>>>>> >>>>>> <mx:DataGridColumn headerText="Tarefa Agendada" id="taskSchedule" >>>>>> labelFunction="*labelFunctionTaskGroupDescription*"/> >>>>>> >>>>>> [Bindable] >>>>>> [RemoteClass(alias="br.com.sumus.coyote.domain.TaskDomain")] >>>>>> >>>>>> public class TaskDomain { >>>>>> >>>>>> public function TaskDomain(){ >>>>>> >>>>>> } >>>>>> >>>>>> public var id:int; >>>>>> public var description:String; >>>>>> public var register:Date; >>>>>> >>>>>> private var _taskGroup:TaskGroupDomain; >>>>>> >>>>>> public function get taskGroupDomain():TaskGroupDomain { >>>>>> return _taskGroup; >>>>>> } >>>>>> >>>>>> public function set >>>>>> taskGroupDomain(value:TaskGroupDomain):void { >>>>>> _taskGroup = value; >>>>>> } >>>>>> } >>>>>> >>>>>> [Bindable] >>>>>> [RemoteClass(alias="br.com.sumus.coyote.domain.TaskGroupDomain")] >>>>>> >>>>>> public class TaskGroupDomain { >>>>>> >>>>>> public function TaskGroupDomain(){ >>>>>> >>>>>> } >>>>>> >>>>>> public var id:int; >>>>>> private var _description:String; >>>>>> >>>>>> public function get description():String { >>>>>> return _description; >>>>>> } >>>>>> >>>>>> public function set description(value:String):void { >>>>>> _description = value; >>>>>> } >>>>>> } >>>>>> >>>>>> Do jeito que está não aparece nada na aplicação. >>>>>> >>>>>> Alguém pode me dizer onde estou errando? >>>>>> >>>>>> -- >>>>>> Sérgio Fantin >>>>>> http://serjaum.wordpress.com >>>>>> >>>>>> -- >>>>>> 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 >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> ----------------------------------------------------------- >>>>> Guilherme Sjlender - >>>>> Desenvolvedor RIA - Flex/Java - >>>>> http://site.gflex.biz - >>>>> ------------------------------------------------ >>>>> >>>>> -- >>>>> 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 >>>> >>> >>> >>> >>> -- >>> 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 >>> >> >> >> >> -- >> Sérgio Fantin >> http://serjaum.wordpress.com >> > > > > -- > Sérgio Fantin > http://serjaum.wordpress.com > > -- > 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
