Tree 默认展开某个节点

阅读更多
纠结了一天的时间弄这个,大都说的是用xml文件作为数据源的,因为我用的是arrayCollection作为数据源,所以也就没有试,在此不做评论,下面就说下我找到的方法。
根据flex的文档我们可以知道,要展开某个节点主要有两种方法:
   (1)expandItem,这个方法只展开指定的节点,不会展开子节点。
   (2)expandChildOf,这个方法会展开指定节点的子节点。
但是单单使用这两个方法不一定可以,还需要注意几个问题:
     1、展开的对象一定要是通过selectItem方法得到,也就是说先把要展开的节点设为选中状态,再得到选中的对象
     2、要通过callLater调用
下面以展开第一个节点为例,贴出代码
     tree.callLater(
       new function():void{
          tree.selectIndex=0;
          tree.expandItem(tree,selectItem,true);
         //tree.expandChildrenOf(tree.selectItem,true);
       }
     )

在Flex中让Tree绑定数据后自动展开节点:
我发现网上流传下面两种代码:

第一种:


treePlayList.dataProvider=results;//刷新

treePlayList.validateNow();//全部展开

treePlayList.selectedIndex=0;

treePlayList.expandChildrenOf(treePlayList.selectedItem,true);

但有些人试过不行, 我也不知道为什么。


第二种:

某些稍微聪明一点的人受到启发想用个延时后再执行就行了:

setTimeout(IniExpand, 1000); //延时1秒

private function IniExpand():void {
              TreeView1.selectedIndex=1;
              TreeView1.expandItem(TreeView1.selectedItem,true);
            }

不过,我亲自试了,根本无效嘛~





其实,我自己想到了一个我认为是权威准确的方法,那就是用callLater方法,再加上匿名代理方法!!!


代码如下:


myTree.callLater(function ():void{myTree.expandChildrenOf(selectedItem.root[0],true);}); //selectedItem.root当然起始节点了(这是在 flash builder 4中测试成功)


这个方法是在某天开窍突然想到Flex/Flash会像C#语言那样,能在方法的参数体里定义一个匿名方法呢?, 类似C#里的匿名代理方法delegate, 结果一试果然成功了,呵呵

你可能感兴趣的:(flex,xml)