いや、flexじゃないものをよく判っているのかと言われると、返す言葉もないわけですが、いずれにしても、flexの非常につまらない部分でとても時間を食ってしまっているのは間違いないのです。
仕事で使うツールを、flexを使って作っています。いえ、僕がやり出したのではなく、ある一人が始めたら、上司が気に入ってしまって、皆でそのように行なおう、と古代エジプト人のように(違う)、そう決まってしまったのです。
さて、今回のはまり道は、AdvancedDataGridと、その中にはめ込む itemRendererなのです。かっこよく、ProgressBarやら、複数の情報を表示するカラムなどを実現するクラスやらをつくって、itemRendererにして、びしっと決まった……と思っていたのですが、あろうことか、そうしたカラムはクリックしても選択できないし、そもそもカーソルを乗せても、その行にセレクターがやってこないのです。何でもない普通の文字が表示されるだけのカラムの上には来ますから、もう何か、カスタムのRendererが悪いのは自明なのです。
おのおののクラスは、とりあえず、IListItemRenderer を実装しています。これで set data(), get data()を実装してやればとりあえず、itemRendererにはなれるのです。が、これだけでは何かが足りないので、これらのカラムはマウスが来ても反応しないのです oTL
とりあえず、ラベルを二個、縦に並べただけのものは、MXMLにin placeで、レンダラを定義するように変えてみました。
<mx:AdvancedDataGridColumn>
<mx:itemRenderer>
<mx:Component>
<mx:Script>
<![CDATA[
private function label(d:Object):String
{
// text=”{data.label}” と書くと、unable to bind to property label の警告が乱発する。
var c:SomeClass = d as SomeClass;
return c.label;
}
]]>
</mx:Script>
<mx:VBox>
<mx:Label fontWeight=”bold” text=”{label(data)}” />
<mx:Lable text=”{outerDocument.label(data)}” />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
これだと、同じコトをしているだけのはずのclassをitemRendererに指定した時と違って、ちゃんとカーソルに反応するのです(/_T)
まあ、時間ばかり食っても仕方ないので、とりあえず、これで逃げられる部分は逃げることにしました。けれど、逃げられない部分はどうしたものか、今でも迷い中なのです。
コメント