一个延迟加载Tree数据的例子 .

本文介绍了一种在大型树型结构应用中实现延迟加载的技术,通过分层生成数据,仅在需要时加载下一层节点,有效提高了应用性能。详细解释了XML代码实现,包括数据收集、树视图显示以及节点加载机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在有树型结构的应用中,很多时候这棵树的级树和数据量比较大,如果一次加载并生成整颗树时,往往并不可行,于是需要建立一棵延迟加载树,下面就是这样的一个例子,其中的代码我作了命名和注释的修改,原代码是以前摘自别的作者的。

1.<?xml version="1.0" encoding="utf-8"?>
2.<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
3.    creationComplete="initTreeData()">
4.    <mx:Script>
5.        <![CDATA[
6.           
7.            import mx.events.TreeEvent;
8.            import mx.collections.ArrayCollection;
9.           
10.           
11.            [Bindable]
12.            private var acSiteTreeList:ArrayCollection;
13.           
14.            private function initTreeData():void {
15.                var obj:Object;
16.                acSiteTreeList = new ArrayCollection ();
17.                for(var i:int = 0; i <3; i++) {
18.                    obj= new Object();
19.                    obj["type"] = "folder";
20.                    obj["children"] = new ArrayCollection();
21.                    //fetch is a property in the dataprovider to check if I have fetched the child nodes previously
22.                    //使用fetch来作是否生成下一级节点的依据
23.                    obj["fetch"] = false;
24.                    obj["label"] = "folder_" + i.toString();
25.                    acSiteTreeList.addItem(obj);
26.                }
27.            }
28.           
29.            private function setView(event:TreeEvent):void {
30.                if(event.item.type == "folder" && event.item.fetch == false) {
31.                   
32.                   
33.                    var obj:Object;
34.                    var item:Object;
35.                    var children:ArrayCollection;
36.                    for(var i:int = 0; i <acSiteTreeList.length; i++) {
37.                        obj= new Object();
38.                        obj["type"] = "node";
39.                        //如果当前节点有子节点的话,需要建立一个children的属性,这样会建立无穷级树
40.                        //obj["children"] = new ArrayCollection();                     
41.                        obj["fetch"] = false;
42.                        obj["label"] = "node_" + i.toString();
43.                        item = event.item;
44.                        children = item.children;
45.                        item.fetch = true;
46.                        children.addItem(obj);
47.                        acSiteTreeList.itemUpdated(item);
48.                    }
49.                }
50.            }
51.        ]]>
52.    </mx:Script>
53.    <mx:Canvas width="100%" height="100%">
54.        <mx:Tree id="treeSiteList" dataProvider="{acSiteTreeList}" x="204" y="10" height="582" width="394" itemOpen="setView(event)"></mx:Tree> 
55.    </mx:Canvas>
56.</mx:Application>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值