Flash Builder -> Tree -> ノードの開閉

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-31 (土) 21:59:23 | 最終更新:2010-07-31 (土) 22:17:38

Tree コンポーネントの各ノードの開閉を制御したい。

expandItem() メソッドを用いることで実現できる。

開く場合は、第2引数を true に、閉じる場合は、第2引数を false に。

 

Actionscript 3.0 on Flex 4

  1. public function expandItem(
  2.     item:Object,
  3.     open:Boolean,
  4.     animate:Boolean = false,
  5.     dispatchEvent:Boolean = false,
  6.     cause:Event = null
  7. ):void

Adobe® Flex® 4.1 リファレンスガイド:Tree expandItem() メソッド
 

item

今のところ、XMLListCollection の方法しかわからない。

しかも、場所を自由に選ぶ方法がわからない。

詳細は、以下の 特定のノードの開閉 を参照。
 

特定のノードの開閉

今のところ、起動時に固定フォルダを開く方法しか試していない。
 

XML オブジェクトを辿る手法
Actionscript 3.0 on Flex 4

  1. var myXML:XML = new XML(event.result);
  2. myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );
  3.  
  4. myTree.validateNow();
  5. treeFavorit.expandItem(myXML.children()[0], true, true);

これはルートを表示しない方式の Tree で、1番目のフォルダをデフォルトで開いた状態にしている。

4行目に関しては

dataProvider を設定し、その直後に expandItem() を呼び出した場合は、不適切な動作が起こる可能性があります。
コンポーネントが検証されるまで待つか、validateNow() を呼び出します。

リファレンスのこの指示に従ったまでである。
 

XML オブジェクトをインデックスで拾う手法

Tree コンポーネントには、indexToItemRenderer() メソッドというものがあり
インデックスから当該アイテムレンダラを取得できる。

ただこのインデックスは曲者で、現在の状態で上から何番目 というものらしく
ノードの開閉状態によって コロコロ変化する ようだ。

さりながら、メインフォルダであればルートを表示していれば 1 。
ルートを表示してなければ 0 になる。

これを利用して以下のようにすることで、メインフォルダに関してだけは成功した。

Actionscript 3.0 on Flex 4

  1. var myXML:XML = new XML(event.result);
  2. myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );
  3.  
  4. myTree.validateNow();
  5. var renderer:IListItemRenderer = myTree.indexToItemRenderer(0);
  6. if (renderer)
  7. {
  8.     var myXML:XML = renderer.data as XML;
  9.     myTree.expandItem(myXML, true);
  10. }
Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-31 (土) 21:59:23 | 最終更新:2010-07-31 (土) 22:17:38

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment