ActionScript实现TreeView数据结构

来源:互联网 发布:科勒橱柜怎么样 知乎 编辑:程序博客网 时间:2024/05/21 05:59

     由于ActionScript语言的动态特性,flex中所有树形结构数据都是直接使用xml进行处理的,虽然非常灵活,但是在使用时也会感到不方便,因此不妨实现一个Treeview的数据结构,并以此数据结构作为mxml中的数据源,使用起来就会方便很多了。

TreeNode的代码:

package com.sample.Control{import mx.collections.ArrayCollection;[Bindable]public dynamic class TreeNode{public var text:String="";public var value:String="";public var url:String="";public var Target:String="";public var ShowCheckBox:Boolean=false;public var Checked:Boolean=false;public var Depth:int=0;public var Expanded:Boolean=false;public var ImageTooltip:String="";public var ImageUrl:String="";public var Selected:Boolean=false;public var Tooltip:String="";public var Children:ArrayCollection=null;public function TreeNode(xml:XML){if(xml==null)return;this.text = xml.TEXT||xml.@TEXT||xml.@text||xml.text;this.value = xml.VALUE||xml.@VALUE||xml.@value||xml.value;this.url = xml.URL||xml.@URL||xml.@url||xml.url;this.Target = xml.TARGET||xml.@TARGET||xml.@Target||xml.Target;var showCheckBox:String = xml.SHOWCHECKBOX||xml.@SHOWCHECKBOX||xml.@ShowCheckBox||xml.ShowCheckBox;this.ShowCheckBox = showCheckBox=="true";var checked:String = xml.CHECKED||xml.@CHECKED||xml.@Checked||xml.Checked;this.Checked = checked=="true";var expand:String = xml.EXPANDED||xml.@EXPANDED||xml.@Expanded||xml.Expanded;this.Expanded = expand=="true";if(xml.DEPTH!=undefined){this.Depth = xml.DEPTH;}this.ImageTooltip = xml.IMAGETOOLTIP||xml.@IMAGETOOLTIP||xml.@ImageTooltip||xml.ImageTooltip;this.ImageUrl = xml.IMAGEURL||xml.@IMAGEURL||xml.@ImageUrl||xml.ImageUrl;if(xml.SELECTED!=undefined){this.Selected = xml.SELECTED=="true";}if(xml.TOOLTIP!=undefined){this.Tooltip = xml.TOOLTIP;}if(xml.CHILDNODES!=undefined && xml.CHILDNODES.length()>0){var cNodes:ArrayCollection = new ArrayCollection();for(var index:int=0;indexlength();index++){var xNode:XML = xml.CHILDNODES.child(index)[0];if(xNode!=null){ cNodes.addItem(new TreeNode(xNode)); } }this.Children = cNodes;}}///转换为XMLpublic function ToXML():XML{var node:XML = new XML("");node.@text = this.text;node.@value = this.value;node.@Checked = this.Checked;node.@Depth = this.Depth;node.@Expanded = this.Expanded;node.@ImageTooltip = this.ImageTooltip;node.@ImageUrl = this.ImageUrl;node.@Selected = this.Selected;node.@ShowCheckBox = this.ShowCheckBox;node.@Target = this.Target;node.@Tooltip = this.Tooltip;node.@url = this.url;if(this.Children!=null && this.Children.length>0){for each(var cNode:TreeNode in this.Children){node.appendChild(cNode.ToXML());}}return node;}}}
TreeView的代码:
package com.sample.Control{import mx.collections.ArrayCollection;///Tree控件的数据源容器public dynamic class TreeView{private var m_Nodes:ArrayCollection;///构造,参数可以为TreeNode、XML、XMLListpublic function TreeView(nodes:Object=null){m_Nodes=new ArrayCollection();if(nodes!=null){if(nodes is TreeNode){m_Nodes.addItem(nodes);}else if(nodes is XML){this.createFromXML(nodes as XML);}else if(nodes is XMLList){this.createFromXMLList(nodes as XMLList);}}}//从XML构造private function createFromXML(xml:XML):void{if(xml.@text!=undefined || xml.text!=undefined||xml.@TEXT!=undefined || xml.TEXT!=undefined){m_Nodes.addItem(new TreeNode(xml));}else if(xml.children().length()>0){createFromXMLList(xml.children());}}//从XMLList构造private function createFromXMLList(xmlList:XMLList):void{if(xmlList.length()>0){for(var index:int=0; indexlength();index++){var xml:XML = xmlList[index];m_Nodes.addItem(new TreeNode(xml));}}}///转换为XMLpublic function ToXML():XML{var xml:XML = new XML("");if(m_Nodes.length>0){for each(var node:TreeNode in m_Nodes){xml.appendChild(node.ToXML());}}return xml;}static public function GetCheckedTreeNode(Data:XMLList):ArrayCollection{if(Data==null)return null;var array:ArrayCollection = new ArrayCollection();for(var index:int =0;indexlength();index++){var xNode:XML = Data.child(index)[0];GetCheckedTreeNodeByNode(xNode,array);}return array;}static private function GetCheckedTreeNodeByNode(Node:XML,array:ArrayCollection):void{if(Node.@Checked=="true"){//本节点已经勾选array.addItem(Node);}if(Node.children().length()>0){//开始检测子节点for(var index:int =0;indexlength();index++){var cNode:XML = Node.child(index)[0];GetCheckedTreeNodeByNode(cNode,array);}}}}}
原创粉丝点击