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