Flex Tree不会重新扩展

时间:2010-02-09 16:41:16

标签: flex actionscript-3 flex3 tree

我有一个树形控件,在我放入一个项目(更新数据提供者)后,我希望它保持打开状态。我已经尝试了很多东西,包括this question的例子,我无法开始工作,所以我做的事情让我觉得更基本。像这样:

[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);
}

但即使这样也会让我的树最小化。出了什么问题?

2 个答案:

答案 0 :(得分:3)

所以我终于弄清楚发生了什么。在我的drop函数中,我基本上重建了整个DP。虽然它几乎相同,但它在Flash播放器中会有不同的UID,因此open var中的对象不再引用DP中的对象。幸运的是我的XML数据提供者中有一个ID字段,所以使用它我可以在重建的DP中查找对象,最后让expandItem方法在那里工作。

所以我的重新打开功能现在看起来像这样:

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

答案 1 :(得分:1)

对不起,这里有完整的解释:底部的链接提供完整的说明以及完整的样本。

您必须使用Tree控件的creationComplete事件,而不是initialize事件,因为数据提供程序在creationComplete事件之前未完全初始化并可用。

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

OR

您还可以通过设置expandItem()方法来调度itemOpen事件,从而获取openItems框以指示初始打开的项目。您可以通过将expandItem()方法的第四个可选参数指定为true来执行此操作。真正的第四个参数使树在项目打开时调度打开事件。以下示例显示了第四个参数的使用:

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

默认情况下,Tree控件在初始化时会折叠,但您可以对其进行初始化,以便在选择特定节点的情况下展开它。

<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