EXTJS4.x之无限级树形菜单实现

目前在Web应用程序开发领域,Ext JS框架已经逐渐被广泛使用,它是富客户端开发中出类拔萃的框架之一。在Ext的UI控件中,树形控件无疑是最为常用的控件之一,它用来实现树形结构的菜单。TreeNode用来实现静态的树形菜单,AsyncTreeNode用来实现动态的异步加载树形菜单,后者最为常用,它通过接收服务器端返回来的JSON格式的数据,动态生成树形菜单节点。生成树有两种思路,一种是一次性生成全部树节点,另一种是异步加载树节点(branch-by-branch)。对于大数据量的菜单节点来说,异步加载是比较合适的选择,但是对于小数据量的菜单来说,一次性生成全部节点应该是最为合理的方案。

一次生成全部节点在上次已经编写过了,现在来折腾一下异步加载属性菜单。

1.启动Sencha Architect,新建工程命名为treepanel放在ExtBook的webroot目录下


2.在ExtBook工程的controller包里面创建nodetree包,在里面创建NodeTreeController.java文件,内容如下

package org.extbook.controller.nodetree;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value="/NodeTreeController") 
public class NodeTreeController {

	@RequestMapping(value="/list")
	@ResponseBody
	public Object list(
			@RequestParam String node
			) {
		List<Object> list = new ArrayList<Object>();
	    if (node != null) {  
	        if (node.equals("0")) {  
	        	Map<String, Object> map1 = new HashMap<String, Object>();
	        	map1.put("id", 1);
	        	map1.put("text", "子节点1");
	        	map1.put("leaf", true);
	        	list.add(map1);
	        	Map<String, Object> map2 = new HashMap<String, Object>();
	        	map2.put("id", 2);
	        	map2.put("text", "子节点2");
	        	map2.put("leaf", false);
	        	list.add(map2); 
	        } else if (node.equals("2")) {  
	        	Map<String, Object> map1 = new HashMap<String, Object>();
	        	map1.put("id", 3);
	        	map1.put("text", "孙子节点1");
	        	map1.put("leaf", true);
	        	list.add(map1);
	        	Map<String, Object> map2 = new HashMap<String, Object>();
	        	map2.put("id", 4);
	        	map2.put("text", "孙子节点2");
	        	map2.put("leaf", false);
	        	list.add(map2); 
	        } else if (node.equals("4")) {  
	        	Map<String, Object> map1 = new HashMap<String, Object>();
	        	map1.put("id", 5);
	        	map1.put("text", "曾孙节点1");
	        	map1.put("leaf", true);
	        	list.add(map1);
	        	Map<String, Object> map2 = new HashMap<String, Object>();
	        	map2.put("id", 6);
	        	map2.put("text", "曾孙节点2");
	        	map2.put("leaf", true);
	        	list.add(map2); 
	        }  
	    } 
		return list;
	}
}
目录如下



2.使用Sencha Architect创建以下控件


treestore:需要设置的属性如下

autoLoad: true,
autoSync: true,
storeId: 'MyJsonTreeStore',

root:

{
                id: 0,
                test: 'root node',
                expanded: true
            }
fields:添加两个分别为 id,text

MyAjaxProxy:设置url为../NodeTreeController/list

treepane:需要设置的属性如下

store设置为'MyJsonTreeStore即可


保存运行



图中红色圈中地方可以看出我们的数据是动态加载的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值