ラベル関数
ここ最近は 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; } } }