以前在网上找代码,找到的总是不合用,今天我整理一份Flex Tree 通过Arraycollection转化为XML数据源,新增、删除、修改功能的整合,有需要的拿过去,转载请注明出处,不瞎扯了,上图上代码。。。
调用代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application backgroundColor="white" creationComplete="resetData();" fontSize="12" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.utils.ArrayUtil;
import mx.rpc.xml.SimpleXMLDecoder;
import mx.collections.XMLListCollection;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
[Bindable]
var xml:XML=new XML();
[Bindable]
var arrayString:String='[{id:"1",name:"root",parentId:"-1"},\n'+
'{id:"2",name:"node1-1",parentId:"1"},\n'+
'{id:"3",name:"node2-1",parentId:"2"},\n'+
'{id:"4",name:"node2-2",parentId:"2"},\n'+
'{id:"5",name:"node4-1",parentId:"4"},\n'+
'{id:"6",name:"node1-2",parentId:"1"},\n'+
'{id:"7",name:"node5-1",parentId:"5"},\n'+
'{id:"7",name:"node3-1",parentId:"3"}]';
var array:ArrayCollection=new ArrayCollection([
{id:"1",name:"root",parentId:"-1"},
{id:"2",name:"node1-1",parentId:"1"},
{id:"3",name:"node2-1",parentId:"2"},
{id:"4",name:"node2-2",parentId:"2"},
{id:"5",name:"node4-1",parentId:"4"},
{id:"6",name:"node1-2",parentId:"1"},
{id:"7",name:"node5-1",parentId:"5"},
{id:"7",name:"node3-1",parentId:"3"}
]);
//显示树(转换数据)
private function resetData():void{
xml=new Array2XmlTree().getTreeData(array,"id","parentId");
}
//添加当前节点之后的兄弟节点
private function addAfterNode():void{
var selectedItemXML:XML=this.tree.selectedItem as XML;
if(null!=selectedItemXML){
var afterId:Number=new Date().getMilliseconds();
var sparentId:String=selectedItemXML.parent().@id;
var afterNode={id:afterId.toString(),name:testName.text,parentId:sparentId}
new Array2XmlTree().addAfterNode(afterNode,selectedItemXML);
changedData.text=xml.toXMLString();
}
}
//添加当前节点之前的兄弟节点
private function addBeforeNode():void{
var selectedItemXML:XML=this.tree.selectedItem as XML;
if(null!=selectedItemXML){
var beforeId:Number=new Date().getMilliseconds();
var sparentId:String=selectedItemXML.parent().@id;
var beforeNode={id:beforeId.toString(),name:testName.text,parentId:sparentId}
new Array2XmlTree().addBeforeNode(beforeNode,selectedItemXML);
changedData.text=xml.toXMLString();
}
}
//添加子节点
private function addChildNode():void{
var selectedItemXML:XML=this.tree.selectedItem as XML;
if(null!=selectedItemXML){
var childId:Number=new Date().getMilliseconds();
var sparentId:String=selectedItemXML.@id;
var childNode={id:childId.toString(),name:testName.text,parentId:sparentId}
new Array2XmlTree().addChildNode(childNode,selectedItemXML,tree);
changedData.text=xml.toXMLString();
}
}
//重命名节点
private function renameNode():void{
var selectedItemXML:XML=this.tree.selectedItem as XML;
if(null!=selectedItemXML){
new Array2XmlTree().renameNode(selectedItemXML,"name",testName.text);
changedData.text=xml.toXMLString();
}
}
//删除节点
private function delNode():void{
var selectedItemXML:XML=this.tree.selectedItem as XML;
if(null!=selectedItemXML){
new Array2XmlTree().delNode(selectedItemXML);
changedData.text=xml.toXMLString();
}
}
]]>
</mx:Script>
<mx:Button label="resetData" click="resetData();" x="0" y="479"/>
<mx:Button label="addAfterNode" click="addAfterNode();" x="414" y="479"/>
<mx:Button label="addChildNode" click="addChildNode();" x="569" y="479"/>
<mx:Button label="addBeforeNode" click="addBeforeNode();" x="256" y="479"/>
<mx:Button label="renameNode" click="renameNode();" x="719" y="479"/>
<mx:Button label="delNode" click="delNode();" x="867" y="479"/>
<mx:Tree id="tree" width="250" labelField="@name" dataProvider="{xml}" y="30" height="432" x="0"/>
<mx:TextArea editable="false" x="276" text="{arrayString}" y="30" width="362" height="432"/>
<mx:TextArea id="changedData" editable="false" x="674" text="{xml.toXMLString()}" y="30" width="368" height="432"/>
<mx:Label x="276" y="2" text="初始化arraycollection数据:" width="183"/>
<mx:Label x="10" y="2" text="树:" width="183"/>
<mx:Label x="674" y="2" text="转换XML后的数据:" width="183"/>
<mx:TextInput text="测试节点" id="testName" x="80" y="479"/>
</mx:Application>
工具类代码:
/**
* ArrayCollection转换树结构数据、添加、删除、重命名节点
* Date:2012-04-07
* Author:Tangdl
*
* 数据转换使用方法:
* treeData=new Array2Tree().getTreeData(array,"id","parentId","-9999");
* array:数据库查询数据ArrayCollection
* id:数据库查询字段标识
* parentId:数据库查询字段父亲标识
* -9999:根节点父亲标识,默认为-1
*
* 添加兄弟节点(之后)使用方法:
* new Array2XmlTree().addAfterNode(afterNode,selectedItemXML);
* afterNode:添加的节点对象
* selectedItemXML:当前选中节点的XML
*
* 添加兄弟节点(之前)使用方法:
* new Array2XmlTree().addBeforeNode(beforeNode,selectedItemXML);
* beforeNode:添加的节点对象
* selectedItemXML:当前选中节点的XML
*
* 添加子节点使用方法:
* new Array2XmlTree().addChildNode(childNode,selectedItemXML,tree);
* childNode:添加的节点对象
* selectedItemXML:当前选中节点的XML
* tree:树对象
*
* 重命名节点使用方法:
* new Array2XmlTree().renameNode(selectedItemXML,"name",testName.text);
* selectedItemXML:当前选中节点的XML
* "name":需要重名名的字段名称
* testName.text:新名称字符串
*
*
* 删除节点使用方法:
* new Array2XmlTree().delNode(selectedItemXML);
* selectedItemXML:当前选中节点的XML
* */
package{
import mx.collections.ArrayCollection;
import mx.controls.Tree;
public class Array2XmlTree {
/**
* 对比标识(parentNodeIdName,nodeIdName)
* 原始数据
* 根节点标识
*/
private var parentNodeIdName, nodeIdName, rootFlag:String;
private var assembleArray:ArrayCollection=new ArrayCollection();
/**
* 返回树形结构数据类型
*/
public function getTreeData(sourceArray:ArrayCollection, nodeIdName:String="NODE_ID", parentNodeIdName:String="PARENT_NODE_ID", rootFlag:String="-1"):XML {
//初始化数据
this.parentNodeIdName=parentNodeIdName;
this.nodeIdName=nodeIdName;
this.assembleArray=sourceArray;
this.rootFlag=rootFlag;
//拼装树数据
var treeDataArray:ArrayCollection=new ArrayCollection();
var treeXml:XML=assembleTree();
return treeXml;
}
/**
* 递归拼装Flex树需要的数据类型
*/
public function assembleTree(nodeObject:Object=null):XML {
//查找根节点
if (nodeObject == null) {
for each (var tmplNodeObject:Object in assembleArray) {
if (tmplNodeObject[parentNodeIdName].toString() == rootFlag) {
nodeObject=tmplNodeObject;
break;
}
}
}
//创建xml对象
var treeXml:XML=new XML("<node></node>");
for(var objectKey:String in nodeObject){
treeXml["@"+objectKey]=nodeObject[objectKey];
}
//查找子节点
if (hasChild(nodeObject)) {
for each (var childObject:Object in getChildList(nodeObject)) {
treeXml.appendChild(assembleTree(childObject));
}
}
return treeXml;
}
/**
* 判断是否有子节点
*/
private function hasChild(nodeObject:Object):Boolean {
return getChildList(nodeObject).length > 0 ? true : false;
}
/**
* 得到子节点列表
*/
private function getChildList(nodeObject:Object):ArrayCollection {
var childArray:ArrayCollection=new ArrayCollection();
for each (var childObject:Object in assembleArray) {
if (childObject[parentNodeIdName].toString() == nodeObject[nodeIdName].toString()) {
childArray.addItem(childObject);
}
}
return childArray;
}
/**
* 添加兄弟节点(之后)
* */
public function addAfterNode(afterNodeObject:Object,selectedNodeXml:XML):void{
//获取当前选择对象的父亲对象并转化为XML
var parentNodeXml:XML=selectedNodeXml.parent();
//新增节点
var treeXml:XML=new XML("<node></node>");
for(var objectKey:Object in afterNodeObject){
treeXml["@"+objectKey]=afterNodeObject[objectKey];
}
//在当前节点之后添加兄弟节点
parentNodeXml.insertChildAfter(selectedNodeXml,treeXml);
}
/**
* 添加兄弟节点(之前)
* */
public function addBeforeNode(beforeNodeObject:Object,selectedNodeXml:XML):void{
//获取当前选择对象的父亲对象并转化为XML
var parentNodeXml:XML=selectedNodeXml.parent();
//新增节点
var treeXml:XML=new XML("<node></node>");
for(var objectKey:Object in beforeNodeObject){
treeXml["@"+objectKey]=beforeNodeObject[objectKey];
}
//在当前节点之前添加兄弟节点
parentNodeXml.insertChildBefore(selectedNodeXml,treeXml);
}
/**
* 添加子节点
* */
public function addChildNode(childNodeObject:Object,selectedNodeXml:XML,currentTree:Tree,isExpand:Boolean=true):void{
//新增节点
var treeXml:XML=new XML("<node></node>");
for(var objectKey:Object in childNodeObject){
treeXml["@"+objectKey]=childNodeObject[objectKey];
}
//在当前节点添加子节点
selectedNodeXml.appendChild(treeXml);
// 添加后是否展开
if(isExpand){
currentTree.expandChildrenOf(selectedNodeXml,true);
}
}
/**
* 重命名节点
* */
public function renameNode(selectedNodeXml:XML,renameField:String,renameString:String):void{
selectedNodeXml["@"+renameField]=renameString;
}
/**
*删除节点
* */
public function delNode(selectedNodeXml:XML):void{
if(selectedNodeXml!=null) {
var parent:XML=selectedNodeXml.parent();
if(parent!=null) {
var children:XMLList=parent.children();
for(var i:int=0;i<children.length();i++) {
if(children[i]==selectedNodeXml) {
delete children[i];
break;
}
}
}
}
}
}
}
上图,上附件。。。。。
搜索功能正在整理中,ing。。。。。
有问题请留言,如有改进也请留言,谢谢,哈哈。。。。
- 大小: 107.8 KB
分享到:
相关推荐
NULL 博文链接:https://xaajie.iteye.com/blog/379054
tree多数情况下操作xml比较方便,而本人却对xml有些排斥,说得更确切些,对xml用的不是那么得心应手,所以选择了ArrayCollection
Flex的Array和ArrayCollection
flex通过httpService读取xml数据到datagird中,通过读取远程URL的XML数据(这里保存到本地),保存到ArrayCollection中,然后在将ArrayCollection绑定到datagird上 环境:flex3.0 可直接运行
flex自定义用ArrayCollection做数据源的带checkbox的tree(功能强大的完美版^_^) .
flex外部读取xml
flex4 动态获取对象属性,动态生成数据源,动态生成lineChart,清除数据。 1.该图表的数据源为ArrayCollection类型的arrayC 2.每增加一条线,其实就是增加一个数据源中的ArrayCollection每个对象的一个属性,且属性...
ArrayCollection添加过滤器后,调用removeItemAt()是无法删除的,下面有个不错的解决方法,大家可以参考下
<?xml version="1.0" encoding="utf-8"?> creationComplete="service.send()" > <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.collections.ArrayCollection; ...
Flex的ArrayCollection在某些情况无法绑定解决方法
ArrayCollection求最大值,最小值,排序。供大家共同学习一下。
原Rxlsx不支持日期格式,读取日期单元格的数据会变成数字,本人将excel的日期格式整理出来,并在读取的时候重新将数字转换回格式,进一步完善了类库的功能。该类库的用法非常简单,只需加载完成excel文件后执行: ...
1. Java通过第三方控件POI操作Excel,读取的数据存储在ArrayCollection中。POI3.7 下载地址 2. 通过Blazeds将ArrayList发送到Flex中的ArrayCollection中。(Blazeds构建过程不在本篇讨论范围,见flex4+blazeds+java...
为Tree设置XML数据 5.6节.为Tree创建项渲染器 5.7节.在Tree控件中使用复杂数据对象 5.8节.只允许List的某一项可被选中 5.9节.为List的项编辑器添加格式化和验证数据 5.10节.跟踪TileList中所有被选中的子节点 5.11节...
使用Object对XML和ArrayCollection之间的转换,包括9种图形集合,简单样式及效果。物有所值,绝对可以运行。
其中包含一个三种状态的checkbox,DataGrid代码中引用了 带多选框的DataGrid(AdvancedDataGrid) 表头有全选CheckBox,三种状态:全选、部分选择、无选择 如果改变目录结构,需要在...目前数据源只能用ArrayCollection
首先环境:Myeclipse+Flex4.5+FusionCharts 至于FusionCharts的相关文件稍后我将放在附件中。 1.新建flex工程: 2.对工程进行相应配置 3.继续配置: 4.找到fusioncharts文件中FusionChartsFlex\...
如果你建立的项目不是flex项目,而需要使用ArrayCollection等,请把这个mx包引入解决问题