flex 由一棵树的最下一级将另一棵树由下至上打开

切记:tree中getparenitem和selectitems只能选中可见的节点的数据,未展开的数据不能显示的


<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.ListEvent;
            
            private var _templateItem : Object = null;
            private var _flag : Boolean = false;
            
            [Bindable]
            private var node : ArrayCollection = new ArrayCollection([
                {name: '张',age:12,misid:'11',id:'01',children:[
                    {name : "张三",age : 12 ,misid:'123',id:'1',parent:'01',children:
                        [
                            {name : "张三1",age : 12,id:'11',misid:null,parent:'1' },
                            {name : "张三2",age : 12,id:'12',misid:'121321',parent:'1'  },
                            {name : "张三3",age : 12,id:'13',misid:null,parent:'1' }
                        ]
                    },
                    {name : "张四",age : 12 ,misid:'123',id:'2',parent:'01',children:
                        [
                            {name : "张四a",age : 12 ,id:'21',misid:'121321',parent:'2' },
                            {name : "张四d",age : 12 ,id:'22',misid:null,parent:'2'},
                            {name : "张四f",age : 12 ,id:'23',misid:null,parent:'2'},
                            {name : "张四g",age : 12 ,id:'24',misid:'121321',parent:'2'}
                        ]
                    }
                ]}
            ]);
            [Bindable]
            private var node1 : ArrayCollection = new ArrayCollection([
                {name: '李',age:12,misid:'11',gisId:'01',children:[
                    {name : "李三",age : 12 ,misid:'123',gisId:'1',children:
                        [
                            {name : "李三1",age : 12,gisId:'11',misid:null },
                            {name : "李三2",age : 12,gisId:'12',misid:'121321'  },
                            {name : "李三3",age : 12,gisId:'13',misid:null }
                        ]
                    },
                    {name : "李四",age : 12 ,misid:'123',gisId:'2',children:
                        [
                            {name : "李四a",age : 12,gisId:'21',misid:'121321' },
                            {name : "李四d",age : 12,gisId:'22' ,misid:null},
                            {name : "李四f",age : 12,gisId:'23' ,misid:null},
                            {name : "李四g",age : 12,gisId:'24',misid:'121321'}
                        ]
                    }    
                    ]
                }
            ]);
            
            /**
             * gisTree点击事件
             */
            private function tree_itemClick( event:Event):void
            {
                var obj :Object = gisTree.selectedItem;
                gisTree.expandItem(obj,true);
                var gisId:String = obj.id;
                var misRootNode:Object = (misTree.dataProvider as ArrayCollection).getItemAt(0);
                if(misRootNode.gisId==gisId)
                {
                    misTree.expandItem(misRootNode,true);    
                }
                else
                {
                    if(misRootNode.children!=null)
                    {
                        openMisTree(misRootNode.children,gisId);
                    }
                }
            }
            /**
             * 根据gis节点打开mis节点(从上级到下级打开)
             */
            private function openMisTree(misNode:Object,gisId:String):void
            {
                for each(var node:Object in misNode)
                {
                    if(node.gisId==gisId)
                    {
                        misTree.expandItem(node,true);
                    }
                    else
                    {
                        openMisTree(node.children,gisId);
                    }
                }
            }
            
            /**
             * misTree点击事件
             */
            protected function misTreeItemClickHandler(event:ListEvent):void
            {
                var gisId :String = '2';//目的打开张四
                var gisTreeRootNode : Object = (gisTree.dataProvider as ArrayCollection).getItemAt(0);
                if(gisTreeRootNode.id==gisId)
                {
                    misTree.expandItem(gisTreeRootNode,true);    
                }
                else
                {
                    if(gisTreeRootNode.children!=null&&gisTreeRootNode.children.length>0)
                    {
                        openGisTreeItem(gisTreeRootNode.children,gisId);
                    }
                }
            }
            private function openGisTreeItem(children:Object,gisId:String):void
            {
                for each(var node:Object in children)
                {
                    if(node.id==gisId)
                    {
                        var parents:Array=new Array();
                        parents.push(node);
                        getGisTreeParent(parents,node.parent);
                        gisTree.openItems=parents;
//                        gisTree.selectedItem = node;
//                        gisTree.expandItem(gisTree.getParentItem(node),true);
//                        gisTree.expandItem(node,true);
                    }
                    else
                    {
                        openGisTreeItem(node.children,gisId);
                    }
                }
            }
            
            private function getGisTreeParent(listParentNode:Array,parentId:String):void
            {
                for each(var nodeItem:Object in node)
                {
                    if(nodeItem.id==parentId)
                    {
                        listParentNode.push(nodeItem);
                        getGisTreeParent(listParentNode,nodeItem.parent);
                    }
                    
                }
            }
            
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <mx:HBox width="100%" height="100%" horizontalAlign="center">
        <mx:Tree id="gisTree"
                 labelField="name"
                 dataProvider="{node}"
                 width="200" itemClick="tree_itemClick(event)"/>
        
        <mx:Tree id="misTree"
                 labelField="name"
                 dataProvider="{node1}"
                 width="200" itemClick="misTreeItemClickHandler(event)"/>
        
    </mx:HBox>
</s:Application>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山人在山上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值