ラベル関数

ここ最近は Scala もさわらずに Flex ばかりさわっています。
テーブル系のコンポーネントでセルに任意の文字列を表示させたい場合、Java ではセルレンダラを実装する必要がありました。
一方 Flex の DataGrid や ComboBox で表示される文字列を変えるだけならば、ラベル用の文字列を返す関数オブジェクトをコンポーネントに設定するだけですみます。これは非常に楽です!
最初、このラベル関数に気付いていなくて本来扱いたいデータをラップしたオブジェクトを作るとか、馬鹿なことをしてしまいました(汗)。

以下、ラベル関数の使用例。

---- Sample.mxml ----
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
  xmlns:mx="http://www.adobe.com/2006/mxml"
  creationComplete="handleCreationComplete()"
>
  <mx:Script>
    <![CDATA[
      import sample.Data;
      private function handleCreationComplete():void {
        dataGrid.dataProvider = [
          new Data("hoge", "fugu", "fuga"),
          new Data("のっち", "あーちゃん", "かしゆか"),
        ];

        column.labelFunction = function(data:Data, column:DataGridColumn):String {
          return data.foo+"/"+data.bar+"/"+data.baz;
        };
      }
    ]]>
  </mx:Script>

  <mx:DataGrid id="dataGrid">
    <mx:columns>
      <mx:DataGridColumn id="column"/>
    </mx:columns>
  </mx:DataGrid>
</mx:WindowedApplication>


データグリッドに格納しているデータには、以下のようなクラスを使用しました。

---- Data.as ----
package sample {
  public class Data {
    public var foo:String;
    public var bar:String;
    public var baz:String;

    public function Data(foo:String, bar:String, baz:String) {
      this.foo = foo;
      this.bar = bar;
      this.baz = baz;
    }
  }
}