树形菜单与遍历多叉数

在公司做了一个树形菜单。由于要基于公司的soa架构,返回客户端的字符是ajax返回的json字符串。于是自己就采用了xtree开源静态的javascript树形控件。通过自己的javascript版本掉用之。


主要用到的javascript方法如下:

 

/**
* 初始化树形菜单
*/
function initPartTreeView(data) {

	/** 从后台服务传回来的数据结构类似如下数据的数据结构
	var data = {"id": "0", "name": "root", "childrenList": [
					{"id": "1", "name": "name1", "childrenList": [{"id": "11", "name": "name11"}]}, 
					{"id": "2", "name": "name2", "childrenList": []},
				    {"id": "3", "name": "name3", "childrenList": [] }
			    ]};
	**/

	//组装树
	tree = intiCircle(tree, data);
	document.getElementById("partTreeView").innerHTML = tree;
}

/**
*  用递归的方法初始化树形菜单
*/
function intiCircle(tree,data) {
    var id = data.id;
	var name = data.name;
	var treeItem = new WebFXTreeItem(name, "javascript: showDeptAndStuff('" + id + "')");
	
	//如果没有根节点则首先创建根节点
	if(!tree) {
	    tree = new WebFXTree(data.name, "javascript: showDeptAndStuff('" + id + "')");
		treeItem = tree;
	} else {
	   tree.add(treeItem);
	}

    //循环递归构建子节点
	var relist = data.childrenList;
	if(relist) {
	   for(var i = 0; i < relist.length; i++) {
	       var ddate = relist[i];
		   intiCircle(treeItem, ddate);
	   }
	}
	
	return tree;
}

 

主要用到的后台java代码如下:

 

/**
	 * 根据 上级部门No 得到部门树状字符串
	 * @param id
	 * @return
	 */
	@Override
	public String getBranchTreeString(String parentNO) {
		
		//得到相同级别部门(在同一部门下的)列表
		List branchList = this.getBranch(parentNO);
		
		String jsonString = "";
		
		//循环组装同级部门
		for(int i = 0; i < branchList.size(); i++) {
			DataObject dataObject = (DataObject) branchList.get(i);
			//如果前边已经有项目,则用","分开
			if(!jsonString.equals("")) {
				jsonString = jsonString + " , ";
			}
			jsonString = jsonString + "{ \"id\": \"" + dataObject.getString("DEP_NO") + "\""
			        + " , \"name\": \"" + dataObject.getString("DEP_NAME") + "\""
			        + " , \"childrenList\": [" + this.getBranchTreeString(dataObject.getString("DEP_NO")) + "]"
			        + " }";
		}
		
		return jsonString;
	}
	
	/**
	 * 得到相同上级部门的部门列表
	 * @param parentNO 上级部门No
	 * @return
	 */
	public List getBranch(String parentNO) {
		
		//组装参数
		Map param = new HashMap();
		param.put("SUPER_DEP_NO", parentNO);
		
		DataObject dataObject = das.excuteQuery("SelectDepartInforBySuperDeptNoForBranchTree", param);
		
		return dataObject.getList("DEPT_INFO");		
	}

 

 

上面的代码并不完整,因为只是为了表达一个意思,就是树形菜单和多叉树的关系。简而言之,多叉数其实就是树形菜单的一个数据结构模型。以前在学校学数据结构的的时候,从用c++写过遍历多叉树的东西。这几天做了一个无限级树形菜单,在做的时候也没有想到在学校学习的东西。等做完了才突然间意识到自己写了一个遍历多叉数的算法。而且这个算法的核心就是“递归调用”。

你可能感兴趣的:(JavaScript,数据结构,算法,Ajax,SOA)