jQuery easyUI 树形菜单

来源:互联网 发布:sql server创建触发器 编辑:程序博客网 时间:2024/05/15 11:59

通常表示一个树节点的方式就是在每一个节点存储一个 parentid。 这个也被称为邻接列表模型。 直接加载这些数据到树形菜单(Tree)是不允许的。 但是我们可以在加载树形菜单之前,把它转换为标准标准的树形菜单(Tree)数据格式。 树(Tree)插件提供一个 'loadFilter' 选项函数,它可以实现这个功能。 它提供一个机会来改变任何一个进入数据。 本教程向您展示如何使用 'loadFilter' 函数加载父/子节点到树形菜单(Tree)。


在jsp头部必须引入jQuery easyUI的js和css

定义一个tree_data.json的文件,里面内如如下:

[{"id":1,"parendId":0,"name":"Foods"},{"id":2,"parentId":1,"name":"Fruits"},{"id":3,"parentId":1,"name":"Vegetables"},{"id":4,"parentId":2,"name":"apple"},{"id":5,"parentId":2,"name":"orange"},{"id":6,"parentId":3,"name":"tomato"},{"id":7,"parentId":3,"name":"carrot"},{"id":8,"parentId":3,"name":"cabbage"},{"id":9,"parentId":3,"name":"potato"},{"id":10,"parentId":3,"name":"lettuce"}]

然后使用loadFile方法创建菜单树,js中内容如下:

$(function(){//加载菜单树$('#tt').tree({url:'../jsp/tree_data2.json',loadFilter: function(rows){return convert(rows);}});});

菜单树转换的实现:

function convert(rows){function exists(rows, parentId){for(var i=0; i<rows.length; i++){if (rows[i].id == parentId) return true;}return false;}var nodes = [];// get the top level nodesfor(var i=0; i<rows.length; i++){var row = rows[i];if (!exists(rows, row.parentId)){nodes.push({id:row.id,text:row.name});}}var toDo = [];for(var i=0; i<nodes.length; i++){toDo.push(nodes[i]);}while(toDo.length){var node = toDo.shift();// the parent node// get the children nodesfor(var i=0; i<rows.length; i++){var row = rows[i];if (row.parentId == node.id){var child = {id:row.id,text:row.name};if (node.children){node.children.push(child);} else {node.children = [child];}toDo.push(child);}}}return nodes;}



0 0