flex 展开树的指定节点

最近公司要求做一个打开指定节点的功能,实现类似自动选择的效果。钻研了若干小时,死了N个脑细胞终于成功,现在贴出来与大家共享之。

 

源码:

 

    [Bindable]
    private var  rootXml:XML; 

    //获取树
    private function getDirectoryTreeHandler(event:ResultEvent):void{
    rootXml = new XML(event.result);
    templateTree.dataProvider = rootXml;
    templateTree.validateNow();
    var tTimer:Timer=new Timer(50,1);
    TWindow.visible=true; 
    tTimer.addEventListener(TimerEvent.TIMER, selectItem); 
    tTimer.start();
    }

 

   //根据提供的节点展开节点和parent节点

   private function expandParents(node:XML):void {
                if (node && !templateTree.isItemOpen(node)) {
                    templateTree.expandItem(node, true);
                    expandParents(node.parent());
                }
            }

 

 

 

   //展开,按id选择模板
    private function selectItem(event:TimerEvent):void
   {   
    if(rootXml != null)
    {
     
     if(null != selectedTemplate)
     {
      item = rootXml..*.(hasOwnProperty("@docId")&&@docId==selectedTemplate.docId)[0]; //按docId选择节点
      
      if(item == null)
      {
       CocoaAlert.show("工作项关联模板文档失败!", "提示", null, true,AlertType.FORBID);  
      }
      else
      {
       
       //展开tree
       expandParents((item as XML));//具体展开的代码
       templateTree.selectedItem =  item;
       selectedItem = item as XML;
       templateVS.selectedIndex=1;
      }
     }
    }
   }

........

 

<mx:Tree id="templateTree" width="100%" height="100%" labelFunction="labelFunc" iconFunction="iconFun" change="treeChanged(event);"
            showRoot="false" dataProvider="{rootXml}" doubleClickEnabled="true" itemDoubleClick="doubleClickTree(event);"/>

 

注意:

1.根据api的提示:“如果设置 dataProvider 之后立即调用 expandItem(),则您可能看不到正确的行为。您应该等待对组件进行验证或调用 validateNow()。 ”所以在设置了dataProvider后就使用了templateTree.validateNow();进行验证。

2.rootXml..*.(hasOwnProperty("@docId")&&@docId==selectedTemplate.docId)[0]; 用于搜索拥有某个属性的xml节点,但是rootXml..*.这段就不解其意(也是网上搜到的,嘿嘿),请各位达人见教啊,谢谢了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值