DClick

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.

Actionscript:
  1. [Bindable]
  2. public class MeuVO implements IValueObject
  3. {
  4.     public var id:Number;
  5.     public var nome:String;
  6.     // Atributo que assume algumas constantes ( "A" - Aberto, "E" - Encerrado )
  7.     public var status:String;
  8.  
  9.     public function get statusLabel():String
  10.     {
  11.        var result:String;
  12.        switch (this.status)
  13.        {
  14.           case "A":
  15.              result = "Aberto";
  16.              break;
  17.           case "E":
  18.              result = "Encerrado";
  19.              break;
  20.           default:
  21.              result = "";
  22.         }
  23.         return result;
  24.     }
  25.  
  26.     public function get nomeStatusLabel():String
  27.     {
  28.         var result:String = this.nome + "-" + this.statusLabel;
  29.         return result;
  30.     }
  31. }

Informando na DataGridColumn como DataField os atributos Getters :

Actionscript:
  1. <mx:datagridcolumn datafield="statusLabel"
  2.     headertext="Status"/>
  3.  
  4. <mx:datagridcolumn datafield="nomeStatusLabel"
  5.     headertext="Descrição"/>

Por Marcello Rego em 24/January/2008 | Comentar | Trackback


No Translations

Adicionar comentário

(requerido)
(requerido, não será publicado)