转载请注明出处:jiq?钦‘s
technical Blog
异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载。
这里面主要设计ztree的setting变量的async属性设置:
var setting = { async: { enable: true, url:"InitServiceIpsData.action", autoParam:["id", "name"], dataFilter: filter },
当点击展开树节点时,会请求url指定的action获取子节点数据,然后绑定到ztree上。
注意这里后台action返回的是JSON字符串,而ztree绑定新的节点数据只接收数组,所以需要在绑定前用filter函数进行数据清洗转换操作,将字符串转换为数组:
//过滤异步加载ztree时返回的数据 function filter(treeId, parentNode, childNodes) { if (!childNodes) return null; childNodes = eval("("+childNodes+")"); //必须转换为[{id:103,pId:1,name:'子节点3'}];这样的格式 return childNodes; }
这样点击展开ztree树节点时,就会请求action获取子节点数据并绑定了。
下面是后台action的一个实现:
public String InitServiceIpsData() { HttpServletRequest request = ServletActionContext.getRequest(); String id = request.getParameter("id"); String name = request.getParameter("name"); System.out.println("请求获取"+name+"的ip列表"); List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>(); for(int i = 1; i <= 2; i++){ HashMap<String,Object> hm = new HashMap<String,Object>(); hm.put("id", id + "0" + i); hm.put("pId", id); hm.put("name", name + "_IP_" + i); hm.put("isParent", false); list.add(hm); } JSONArray finalJson = JSONArray.fromObject(list); this.initServiceIpsData = finalJson.toString(); return SUCCESS; }
时间: 2024-10-17 01:13:35