Evitando o uso de LabelFunctions
Muitas vezes nos deparamos com a necessidade de apresentar em um Datagrid ou List, algum atributo de VO que possui domínio de informação pré-definido (ex. status, situação, …) ou atributo calculado ( ex. nome = id + ‘-’ + descrição) , e precisamos definir uma função de mapeamento para a descrição conveniente. No caso de uma coluna de Datagrid, existe um atributo que se chama labelFunction, que recebe a tal função de mapeamento. Mas, e se precisarmos usar em mais de um fonte essa função ? O uso de classes utilitárias, pode ser uma saída, mas mesmo assim, iríamos precisar definir em todas as colunas pertinentes, a mesma referência para a função.
A melhor saída, a meu ver, é definir na própria classe VO, métodos Getters para os tipos de atributos mencionados acima. Desta maneira, precisaríamos simplesmente definir o atributo DataField da coluna com o nome do atributo do VO que foi criado como somente Getter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [Bindable] public class MeuVO implements IValueObject { public var id:Number; public var nome:String; // Atributo que assume algumas constantes ( "A" - Aberto, "E" - Encerrado ) public var status:String; public function get statusLabel():String { var result:String; switch (this.status) { case "A": result = "Aberto"; break; case "E": result = "Encerrado"; break; default: result = ""; } return result; } public function get nomeStatusLabel():String { var result:String = this.nome + "-" + this.statusLabel; return result; } } |
Informando na DataGridColumn como DataField os atributos Getters :
1 2 3 4 5 | <mx:datagridcolumn datafield="statusLabel" headertext="Status"/> <mx:datagridcolumn datafield="nomeStatusLabel" headertext="Descrição"/> |

Um comentário
Trackbacks
Deixe Seu Comentário