在公司做了一个树形菜单。由于要基于公司的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++写过遍历多叉树的东西。这几天做了一个无限级树形菜单,在做的时候也没有想到在学校学习的东西。等做完了才突然间意识到自己写了一个遍历多叉数的算法。而且这个算法的核心就是“递归调用”。
897

被折叠的 条评论
为什么被折叠?



