flex----遍历树Tree,根据输入的名称搜索树节点,并展示该节点

来源:互联网 发布:新网域名证书 编辑:程序博客网 时间:2024/05/16 04:42

1.Tree的dataProvider为ArrayCollection:treeData

<mx:VBox width="30%" height="100%" ><mx:Label text="选择某节点:" textAlign="center" fontWeight="bold" width="100%"/><!--搜索功能布局框--><mx:HBox  width="100%" height="5%"><mx:TextInput  id="findLeft" keyDown="preActSearch(event)"  text="{myTree.selectedItem.menuName}" width="90%"/><mx:Button id="find1Button" label="搜 索"  fontWeight="bold" cornerRadius="5" right="0" fillColors="#3C80CA"  click="searchActivityType()"/></mx:HBox><mx:Tree id="myTree" width="100%" height="90%" labelField="menuName"showRoot="false" dataProvider="{treeData}" itemClick="myTree_itemClickHandler(event)"/></mx:VBox>


2.定义函数:

//搜索输入框的回车键事件private function preActSearch(event:KeyboardEvent):void{if(event.keyCode==13){searchActivityType();}}//搜索节点private function searchActivityType():void{var type:String  = findLeft.text;var activities:String = null;if(type==null || type.length==0){Alert.show("请输入节点名称","错误");return;}var items:Array = new Array();var pitems:Array = new Array();var node:Object;var nodes:ArrayCollection = myTree.dataProvider as ArrayCollection;var index:int = 0;while(index<nodes.length){node = nodes[index];recursionSearchWithJSON(null,node,type,items,pitems);index++;}for(var i:int =0;i<pitems.length;i++){myTree.expandChildrenOf(pitems[i],true);}if(items!=null && items.length>0){myTree.selectedItem = items[0];myTree.scrollToIndex(myTree.selectedIndex);}myTree.selectedItems=items;}
                          //标志大的树节点是否遍历完毕var temp:Array = new Array();var flag:Boolean = false;private function recursionSearchWithJSON(parentNode:*,node:Object,type:String,items:Array,pitems:Array):void{var label:String;var arrNode:ArrayCollection;var pnode:*;if(parentNode==null){temp = new Array();flag = false;}else{temp.push(parentNode);}//描述label = node.menuName;if(label!=null && label.indexOf(type)!=-1){flag = true;items.push(node);}//这里不能加else,不然不能遍历当前节点对子节点if(myTree.dataDescriptor.isBranch(node)){if(node.hasOwnProperty("children")){arrNode = node.children as ArrayCollection;for(var i:int=0;i<arrNode.length;i++){recursionSearchWithJSON(node,arrNode[i],type,items,pitems);}}}if(flag){for(var i=0;i<temp.length;i++){pitems.push(temp[i]);}temp = new Array();flag = false;}