ext TreePanel 一次递归加载数据及异步加载数据(点子节点加载数据)

 一、一次加载数据(适用于数据量较少的情况)

首先来看java端获取数据

public String tree() throws IOException{
	JSONArray root = new JSONArray();
	 	//检索数据库获取数据 select nodeid,nodename,parent_id from table    
               List<String[]> dataList = CommonService.getServiceValueList();                   	 	                       if(dataList.size()>0){ 
				if(dataList!=null&&dataList.size()>0){
					 
					for (String[] tree:dataList) {
						 							 
							Map<String, Object> map = new HashMap<String, Object>();
							map.put("id", tree[0]);
							map.put("text", tree[1]); 
							
							JSONArray child = getchild(dataList,tree);
							map.put("children", child);
							root.add(map); 
						 						
					}
				}
			}
		 
		root.toJSONObject(root);
		getResponse().setContentType("text/json; charset=utf-8");
		PrintWriter out=getResponse().getWriter();
		out.print(root);
		out.close();
		return null;
	}
 private JSONArray getchild(List<String[]> dataList,String[] tree) {
  //递归获取字几点
  JSONArray child = new JSONArray();
  for (String[] sonTree:dataList) {
   if (tree[0].equals(sonTree[2])) {
    Map childjson = new HashMap();
    childjson.put("id", sonTree[0]);
    childjson.put("text", sonTree[1]);  
    JSONArray childs = getchild(dataList,sonTree);
    if(childs.size()>0) {
     childjson.put("children", childs);
    } else {
     childjson.put("leaf", "true");
    }
    
    child.add(childjson); 
   }
  }
  
  return child;
 }


js页面的代码为

 var treeload =new Ext.tree.TreeLoader({
        	dataUrl: nowurl+'path!tree.action?dyj='+new Date() 
        });
   var root = new Ext.tree.AsyncTreeNode({
            text : '业务',
            draggable : false,
            id : '-1',
            loader: treeload

      });
var tree = new Ext.tree.TreePanel({  
  height : height-10, 
        width:width/4-50,
        title:'参数分类',
        animate:true,
        enableDD:false, 
        border:false,
        autoScroll : true, 
        root:root,
  containerScroll : true 
        
       
    });

root.expand();

 

以上代码可以一次性加载所有树节点数据。

 

二、异步加载数据(点子节点加载数据)

 

适用于数据量比较大的时候,希望点击子节点时再去检索数据

 

还是先看看java代码

public String tree() throws IOException{
		JSONArray root = new JSONArray();
	 	   //这里有变化哦 select nodeid,nodename from table where parentid=?
		List<String[]> dataList = CommonService.getServiceValueList(parent_id);
			if(dataList.size()>0){ 
				if(dataList!=null&&dataList.size()>0){
					 
					for (String[] tree:dataList) {
							 
							Map<String, Object> map = new HashMap<String, Object>();
							map.put("id", tree[0]);
							map.put("text", tree[1]);                         
  //是否有子节点
                       List<String[]> subdata = CommonService.getServiceValueList(tree[0], "");
       if(subdata==null || subdata.size()==0) {
        map.put("leaf", "true");
       }
//							map.put("children", child);  这句话一定不能要哦
							root.add(map); 
						
					}
				}
			}
		 
		root.toJSONObject(root);
		getResponse().setContentType("text/json; charset=utf-8");
		PrintWriter out=getResponse().getWriter();
		out.print(root);
		out.close();
		return null;
	}


再看看js吧,只要修改一处并且加上'beforeload'处理就可以了

 var treeload =new Ext.tree.TreeLoader({
        	dataUrl: nowurl+'path/tree!tree.action?service_name=LATNEVENTTREE&parentid=-1&dyj='+new Date() //加 参数了
        });
tree.on('beforeload', function(node){
     
     treeload.dataUrl =nowurl+'path/tree!tree.action?parentid='+node.id+'&dyj='+new Date();
  
    });


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值