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

  1. DataGrid LabelFunction » Bruno bg + ADOBE FLEX

Deixe Seu Comentário