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.
-
[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 :
-
<mx:datagridcolumn datafield="statusLabel"
-
headertext="Status"/>
-
-
<mx:datagridcolumn datafield="nomeStatusLabel"
-
headertext="Descrição"/>

