根据tree绑定数据的上下级关系,实现无限制的分支等级[flex][arr
项目中需要这样一个功能实现,逻辑有点复杂,写得可能有点复杂,以后想到好的方法再改进。。。。。 实现步骤: 【start】 1.从数据库中调取部门的相关记录存入aryDeptSet 2.判断是否为最高级别的部门,如果不是,将该部门记录筛选出存入aryDeptSet2中,并将aryDeptSet中相关记录删除 3.对aryDeptSet2中的记录遍历(倒序遍历) ???? (1)寻找该记录相关连的上下级部门中的最底层的部门保存到temp,并在aryDeptSet2中将该部门删除 ?????(2)在aryDeptSet2中寻找该部门的父级部门存入Arraycol,并将该部门存入Arraycol的children中构建上下级关系, ????????????? 最后将该父级部门在aryDeptSet2中删除。 ??????(3)将aryDeptSet2中其他同级节点也加到Arraycol的children中,并在aryDeptSet2中删除 ??????(4)继续寻找Arraycol的父级部门,循环(2)、(3)步操作,直到寻找到第二等级部门, ???????????????将此时的Arraycol追加到aryDeptSet中对应的最高等级父节点的children下 【end】 ?????? var aryDeptSet :ArrayCollection = event.result.DEPT as ArrayCollection;????var aryDuty :ArrayCollection = event.result.DUTY as ArrayCollection;????var aryDeptSet2 :ArrayCollection = new ArrayCollection();????????//1.先筛选出aryDeptSet二级及以后分枝????????for(var i:Number=aryDeptSet.length-1; i >=0; i--)????{?????var item:Object = aryDeptSet.getItemAt(i);?????if (item.SUPERDEPARTNUM>=0)?????{??????aryDeptSet.removeItemAt(i);??????aryDeptSet2.addItem(item);?????}????}????????????//2.根据aryDeptSet2保留的子分枝重构aryDeptSet????for(var m:Number=aryDeptSet2.length-1; m >=0; m=aryDeptSet2.length-1)????{?????//(1)step first://判断是否有上一级且上一级的SUPERDEPARTNUM不为-1,将其添加到tempArraycol?????var myLevel:Number=0;//save判断 的级数?????var Arraycol:ArrayCollection=new ArrayCollection();//save级数链中的父子关系的items?????var temp:ArrayCollection=new ArrayCollection();//中转站?????//检索具体某一项ITEM的上下级关系?????var deepth:Number=0;?????temp.addItem(aryDeptSet2.getItemAt(0));?????//检索到最后一级?????for(var op:Number=1;;)?????{??????op=1;??????for(var m1:Number=m;m1>=0;m1--)??????{???????if(aryDeptSet2.getItemAt(m1).SUPERDEPARTNUM== temp.getItemAt(0).DEPARTNUM)???????{????????temp.setItemAt(aryDeptSet2.getItemAt(m1),0);????????deepth++;????????break;???????}???????if (m1==0)????????op=0;??????}??????if(op==0)???????break;????? ?????}?????aryDeptSet2.removeItemAt(aryDeptSet2.getItemIndex(temp.getItemAt(0)));m--;?????//(2)构造一个整分枝?????for(var op2:Number=1;;)?????{??????op2=1;??????//<1>添加父节点??????for(var m3:Number=m;m3>=0;m3--)??????{???????if(aryDeptSet2.getItemAt(m3).DEPARTNUM== temp.getItemAt(0).SUPERDEPARTNUM)???????{????????Arraycol.addItem(aryDeptSet2.getItemAt(m3));????????Arraycol.getItemAt(0).children=new ArrayCollection([temp.getItemAt(0)]);????????aryDeptSet2.removeItemAt(m3);m--;????????op2=0;deepth--;????????break;???????}??????}????????????//<2>添加剩余节点同级??????for(var m2:Number=m;m2>=0;m2--)??????{???????if(Arraycol.length==0)????????break;???????if(aryDeptSet2.getItemAt(m2).SUPERDEPARTNUM== temp.getItemAt(0).SUPERDEPARTNUM && aryDeptSet2.getItemAt(m2).SUPERDEPARTNUM!= temp.getItemAt(0).DEPARTNUM)???????{????????Arraycol.getItemAt(0).children.addItem(aryDeptSet2.getItemAt(m2));????????aryDeptSet2.removeItemAt(m2);m--;? ? ???????} ???????????????????}??????if(Arraycol.length>0)??????{???????temp.setItemAt(Arraycol.getItemAt(0),0);????????? ??????} ??????Arraycol.removeAll();??????if(deepth<=0)???????break;???????????}?????//(3)加入该分枝?????for(var m4:Number=aryDeptSet.length-1;m4>=0;m4--)?????{??????if(aryDeptSet.getItemAt(m4).DEPARTNUM==temp.getItemAt(0).SUPERDEPARTNUM)??????{???????if(aryDeptSet.getItemAt(m4).children==null)???????{????????aryDeptSet.getItemAt(m4).children=new ArrayCollection([temp.getItemAt(0)]);????????break;???????}???????else???????{????????aryDeptSet.getItemAt(m4).children.addItem(temp.getItemAt(0));????????break;???????}??????}?????}?????//(4)清空temp?????temp.removeAll(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |