2010-02-09 61 views
2

我有一個樹形控件,在我放下一個項目(更新數據提供者)之後,我希望它保持打開狀態。我嘗試了很多東西,包括this question的示例,這些示例我無法工作,所以我正在做一些我覺得更基本的事情。像這樣:Flex Tree沒有重新擴展

[Bindable] 
public var open:Object = new Object(); 

private function dropItemInTree():void{ 
    open = myTree.openItems; 
    //A bunch of code that updates the DP 
    reopenTree(); 
} 

public function reopenTree():void{ 
    for each(var item:XML in open){ 
     expandParents(item[0]); 
    } 
} 

private function expandParents(node:XML):void { 
    myTree.expandItem(node,true,false); 
} 

但即使這樣也會讓我的樹最小化。出了什麼問題?

+0

XMLTree1.expandItem(MailBox.getItemAt(0),真,假,真); 它的第四個參數。設置它,你的代碼應該工作。有關更多詳情,請參閱下面的答案。 – 2010-02-09 19:02:41

+0

第四個參數僅用於在expandItem方法運行時調度itemOpen事件。在這種情況下,我甚至無法使用expandItem方法打開一個項目,因此將事件觸發並鏈接到該事件也不起作用。 – invertedSpear 2010-02-09 20:27:34

回答

3

所以,我終於想通了什麼事。在我的下拉功能中,我基本上重建了整個DP。儘管它幾乎相同,但在Flash播放器中會有不同的UID,因此打開的var中的對象不再引用DP中的對象。幸運的是,我的XML數據提供者中有一個ID字段,因此我可以在重建的DP中查找對象,最後讓expandItem方法在那裏工作。

所以,我再開功能現在看起來有點像這樣:

public function renderTree():void 
    for each(var item:XML in open){ 
     myTree.expandItem(XML(MyDP..node.(@attr == [email protected])),true); 
     //forcing the type to be XML is VITAL 
    } 
} 
1

對不起,這裏是完整的解釋:底部的鏈接給出了完整的解釋以及完整的示例。

您必須使用樹控件的creationComplete事件,而不是初始化事件,因爲數據提供程序沒有完全初始化並且在creationComplete事件之前可用。

<mx:Tree id="tree1" ... creationComplete="initTree();" > 

OR

你也可以得到openItems盒通過設置expandItem()方法來分派itemOpen事件指示初始開放項目。您可以通過將expandItem()方法的第四個可選參數指定爲true來完成此操作。當項目打開時,真正的第四個參數將導致樹分派一個打開的事件。下面的例子說明了如何使用第四個參數:

XMLTree1.expandItem(MailBox.getItemAt(0), true, false, true); 

默認情況下,當它初始化樹控件摺疊,但你可以初始化它,使它與選擇的特定節點擴展。

<mx:Script> 
    <![CDATA[ 
     import flash.events.*; 
     import mx.events.*; 
     import mx.controls.*; 
     private function initTree():void { 

      XMLTree1.expandItem(MailBox.getItemAt(0), true); 
      XMLTree1.selectedIndex = 2; 
     } 
    ]]> 
</mx:Script> 

的樹控制的基準是:http://livedocs.adobe.com/flex/3/html/help.html?content=dpcontrols_8.html

+0

我的代碼應該展開樹,就像那個例子一樣。我使用了相同的expandItem方法,但是對於我的樹來說它不起作用,我不知道爲什麼。 – invertedSpear 2010-02-09 18:12:33

+0

我在這個例子中遇到的問題是我的樹已經被創建,所以我不需要擔心創建完成或其他任何事情。 expandItem方法應該可以工作,但它不是(它在我編寫的用於打開選定節點的雙擊函數中工作)。爲什麼當我循環打開數組時,它不工作? – invertedSpear 2010-02-09 20:24:59

+0

即使我的問題比這個例子顯示的更抽象一點,我給你一個加票,因爲任何有類似於我的問題的人都需要首先理解這個例子。 – invertedSpear 2010-02-15 15:44:12