flex如何在后台生成 xml

如何在后台生成 xml
例如:

 

  1. <node label="menuList">
  2.   <node label="home" >
  3.         <node label="alessandro" >
  4.         <node label="Music" >
  5.         <node label="Downloads" >
  6.       </node>
  7. </node>    

平层数据若想使用树形功能必须要转化成结构化的数据。这里需要一些处理,通常来说是服务器层直接将数据库里的平层数据转换成结构化数据之后再输出
不过是在服务器转还是在flex里转这不是最大问题,实际上是一个算法问题。稍稍涉及到一些数据结构
这个算法肯定是需要用到遍历和递归的。首先从遍历中找出根节点的数据,在你的例子中,就是parentid为空或者是0,这个是你自己定义的,总有根节点吧?
重新遍历,找出parentid为这个根节点id的节点集合,并将这些集合添加到根节点的子集合属性中,比如root.children=foundChildren这样(as是动态的,可以直接添加属性)。
这个逻辑是复用的,root的id可以被认为是一个参数传进来,而需要查找的集合也是一个参数。这样就能在接下来的递归中用到。
接下来遍历root.children,递归调用上面的逻辑。这样一个root对象就可以成为一个结构化的数据。
以下是完整的例子

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
  3.         creationComplete="mian()"
  4.         >
  5.         <mx:Script>
  6.                 <![CDATA[
  7.                         import mx.collections.HierarchicalData;
  8.                         private var platData:Array=[
  9.                                 {id:1, parentId:0},                
  10.                                 {id:2, parentId:1},                
  11.                                 {id:3, parentId:1},                
  12.                                 {id:4, parentId:2},                
  13.                                 {id:5, parentId:4},                
  14.                                 {id:6, parentId:4},                
  15.                                 {id:7, parentId:6},                
  16.                         ];
  17.                         private function mian(){
  18.                                 var root:Object=findChildren(0, platData);
  19.                                 var tree:Object=platToHierarchical(platData, root[0]);
  20.                                 var hier:HierarchicalData=new HierarchicalData(tree);
  21.                                 adg1.dataProvider=hier;
  22.                         }
  23.                         
  24.                         private function findChildren(parentId:int, source:Array , parentIdField:String="parentId"):Array{
  25.                                 var children:Array=new Array();
  26.                                 for each (var item:Object in source){
  27.                                         if (item[parentIdField]==parentId){
  28.                                                 children.push(item);
  29.                                         }
  30.                                 }
  31.                                 return children;
  32.                         }
  33.                         
  34.                         private function platToHierarchical(platData:Array, startNode:Object, childrenField:String="children",parentIdField:String="parentId"):Object{
  35.                                 var children:Array=findChildren(startNode.id, platData, parentIdField);
  36.                                 var temp:Array=new Array();
  37.                                 for each (var item:Object in children){
  38.                                         temp.push(platToHierarchical(platData, item, childrenField, parentIdField));
  39.                                 }
  40.                                 startNode[childrenField]=temp;
  41.                                 return startNode;
  42.                         }
  43.                 ]]>
  44.         </mx:Script>
  45.         <mx:AdvancedDataGrid x="10" y="10" id="adg1" designViewDataType="tree">
  46.                 <mx:columns>
  47.                         <mx:AdvancedDataGridColumn headerText="id" dataField="id"/>
  48.                         <mx:AdvancedDataGridColumn headerText="parentId" dataField="parentId"/>
  49.                 </mx:columns>
  50.         </mx:AdvancedDataGrid>
  51.         
  52. </mx:Application>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值