ItemRendererの状態をキャッシュする

ItemRenderer自体にステートを持たせたい場合(ダブルクリックで詳細をみせたい場合など)というのが存在します。

ItemRenderer自身は使いまわしなので、独自のプロパティ状態を保持することが出来ません。そこでdataプロパティの中のモデルに持たせたいのですが、List(コンポーネント)自身しかつかわないのでdynamicに持たせるのはどうも・・・。

そこで、PropertyCacheというSingletonのマネージャを作成し、好きなプロパティをキャッシュできるようにしてみました。
function setProperty(parent:Object,child:Object,propertyName;String,val:*):void
function getProperty(parent:Object,child:Object,propertyName;String):*
function purge(parent:Object):void

内部的には入れ子のDirectoryで管理します。
parentにTreeのインスタンス、childに子のインスタンス、propertyNameにアイテムレンダラーのプロパティ、valに値というカンジで、itemRendererのset dataメソッド内で使います。

dataDescriptorの中にこのキャッシュ機能を組み込んでしまえば、Listとともにキャッシュが開放されるので一番すっきりするかもしれません。その場合、parentにはdataProviderを指定してやれば、mediatorパターンで複数のドキュメントを切り替える場合にもラクかと思います。

このやり方で、Treeの子の問題も解決します。
ただ、あまり多用するとせっかくデータサイズを節約しようとしている実装がムダになってしまうので、肝心なところだけ使うようにしましょう。