久々のflex mx:Treeのネタです。といっても、非常に基本的なことです。
Treeのアイテムを開いたり、閉じたりするには?
これ、開くには以前、flex:Treeで自動的にフォルダを展開させるには でTreeのアイテムにドラッグ&ドロップでドロップしようとしたときに、
自動的に開くようにするということで述べましたが、今回は閉じるには?を調べました。
久々のflex mx:Treeのネタです。といっても、非常に基本的なことです。
というのも、デフォルトで「閉じる」「開く」は矢印をクリックすればできるのですが、やっぱり、フォルダとして機能している場合、つまり、他のアイテムの親としてしか機能しないアイテムをクリックすると、開いたり、閉じたりしてほしいなーと思ったのがきっかけです。
だって、矢印が小さいんですもん。
最近、できるとはわかっているよりも、できるのか?できないのか?
のほうを優先してしまい、結構、基本的な部分がはて?どうやるんだ???のままでほったらかしなので。
さて、話は戻って、Treeで、「閉じる」、「開く」を実装するためには、
もちろん、「開く」、「閉じる」のメソッドが必要ですが、「今は開いているの?、閉じているの?」がわからないといけないですよね。
さて、それでは、クリックのイベントで処理をおこなうようにしましょう。
tree.addEventListener(ListEvent.ITEM_CLICK,_fireClickItem);
次に、クリックされた時の処理は
protected function _fireClickItem(e:ListEvent):void{
var tree:Tree = e.currentTarget as Tree;
var obj:Object = tree.selectedItem;
if(!tree.isItemOpen(item.selectedItem)){
tree.expandItem(obj,true,true);
}
else{
tree.expandChildrenOf(obj,false);
}
}
さて、閉じるときと、開くときでことなったメソッドを使っています。
expandChidrenOf(item,boolean)のドキュメントをみると
“指定したアイテムの配下にあるすべてのツリーを開くか、または閉じます。”
とあります。
すべて、開かれても困るので、開くときは、expandItemを使っていまし、
閉じるならすべて閉じたほうがいいかなと使い分けています。
この辺の動作は好みかもしれませんが、深ーいツリーで、やっぱり浅い階層のものを見るときに「閉じて」、「開く」ってことを私自身やってしまうので・・・
でも、ふつうは両方ともexpandItemでいいのでしょうね。
Windowsのエクスプローラもそうなっていることですし・・・・

