使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做起来比较繁琐,几个功能做了一个月,当然了有能力的关系,也有插件易用度的关系

最近要实现的功能用tree树形结构来做是最好的,就是资源的分配,来简单讲讲ztree吧,这是目前国内很火的一个插件,百度一下就能了解,使用起来十分简单

小编我用过3年的jqgrid,在此还是要再次感谢当年的王组让我去跟jqgrid深入浅出,多用了jqgrid后,再看ztree,那就十分简单了,不知道ztree作者是否也参考过jqgrid

首先你需要引入js以及css吧

<!-- ztree -->
<link href="<%=request.getContextPath()%>/css/ztree/zTreeStyle/zTreeStyle.css" rel="stylesheet">
<script src="<%=request.getContextPath()%>/js/ztree/jquery.ztree.core.js"></script>

然后你需要定义一个id="treePermission",这点和jqgrid一样

<!-- ztree start -->
                                        <div class="zTreeDemoBackground left">
                                            <ul id="treePermission" class="ztree"></ul>
                                        </div>

定义一下数据结构和基本配置

var setting = {
    async: {
        enable: true,
        url: getAsyncUrl,
        autoParam: ["id"]
    },
    data: {
        simpleData: {
            enable: true,
            idKey: "id",
            pIdKey: "pId",
            rootPId: 0
        }
    }
};

// 查询子节点
function getAsyncUrl(treeId, treeNode) {
    return "<%=request.getContextPath()%>/auth/permission/getTreeSubNode";
}

var zNodes =[
    { id:1, pId:0, name:"父节点1 - 展开", open:true},
    { id:11, pId:1, name:"父节点11 - 折叠"},
    { id:111, pId:11, name:"叶子节点111"},
    { id:112, pId:11, name:"叶子节点112"},
    { id:113, pId:11, name:"叶子节点113"},
    { id:114, pId:11, name:"叶子节点114"},
    { id:12, pId:1, name:"父节点12 - 折叠"},
    { id:121, pId:12, name:"叶子节点121"},
    { id:122, pId:12, name:"叶子节点122"},
    { id:123, pId:12, name:"叶子节点123"},
    { id:124, pId:12, name:"叶子节点124"},
    { id:13, pId:1, name:"父节点13 - 没有子节点", isParent:true},
    { id:2, pId:0, name:"父节点2 - 折叠"},
    { id:21, pId:2, name:"父节点21 - 展开", open:true},
    { id:211, pId:21, name:"叶子节点211"},
    { id:212, pId:21, name:"叶子节点212"},
    { id:213, pId:21, name:"叶子节点213"},
    { id:214, pId:21, name:"叶子节点214"},
    { id:22, pId:2, name:"父节点22 - 折叠"},
    { id:221, pId:22, name:"叶子节点221"},
    { id:222, pId:22, name:"叶子节点222"},
    { id:223, pId:22, name:"叶子节点223"},
    { id:224, pId:22, name:"叶子节点224"},
    { id:23, pId:2, name:"父节点23 - 折叠"},
    { id:231, pId:23, name:"叶子节点231"},
    { id:232, pId:23, name:"叶子节点232"},
    { id:233, pId:23, name:"叶子节点233"},
    { id:234, pId:23, name:"叶子节点234"},
    { id:3, pId:0, name:"父节点3 - 没有子节点", isParent:true}
];

$(document).ready(function(){
    $.post("<%=request.getContextPath()%>/auth/permission/getTreeRootNode",{},function(jsonResult){
        $.fn.zTree.init($("#treePermission"), setting, jsonResult.data);
    });
});

zNodes是初始化的静态数据,可以不用,这里为了方便贴了出来,初始化的时候放入$.fn.zTree.init($("#treePermission"), setting, zNodes);即可

znodes我没有使用,在初始化的时候会预先加载根目录,然后点击再次加载子目录

@Override
    public List<TreeNode> queryNode(Integer parentId) {

        SysPermissionExample example = new SysPermissionExample();
        Criteria criteria = example.createCriteria();
        criteria.andParentidEqualTo(parentId);
        List<SysPermission> permissions = sysPermissionMapper.selectByExample(example);

        // 如果为空,说明没有根权限,需要创建一个
        if (permissions.isEmpty()) {
            return null;
        } 

        // 获得根权限返回出去
        List<TreeNode> rootNodeList = new ArrayList<TreeNode>();
        for (SysPermission p : permissions) {
            TreeNode rootNode = new TreeNode(p.getId(), p.getParentid(), p.getName(),
                    p.getType() == ShiroPermissionTypeEnum.MENU.value ? true : false,
                    p.getType() == ShiroPermissionTypeEnum.MENU.value ? true : false);
            rootNodeList.add(rootNode);
        }

        return rootNodeList;
    }
@RequestMapping(value="/permission/getTreeSubNode")
    @ResponseBody
    public List<TreeNode> getTreeSubNode(TreeNode node) throws Exception{

        List<TreeNode> rootNodeList = systemAuthService.queryNode(node.getId());
        return rootNodeList;
    }

好了,调用后就直接可以使用了,非常简单,还有一些简单配置请参考官网吧~

 

时间: 2024-08-03 13:50:13

使用ztree.js,受益一生,十分钟学会使用tree树形结构插件的相关文章

十分钟学会 xajax

ajax 译者按: xajax 最大的特点是他采用了xml response,这样我们可以用php来布置,处理异步传送数据之后,网页内容的更新.而这些操作其它的ajax 框架都是由js来完成的的.xajax 使我们只需要写一些php函数,就可以实现.所有学好xajax的关健在于熟练掌握 xajaxresponse 类. tutorials:learn xajax in 10 minutes教程:十分钟学会 xajax using xajax in a php script一个使用的xajax的p

js Tree - 树形菜单插件

   js Tree - 树形菜单       1)DTree是 JQuery 著名树形插件Dynatree的包装类,增加右键菜单,添加.删除.更新接口. 主页: http://www.boarsoft.com/cn/javascript/dtree/     2)jquery treeList widget这是一个利用jQuery UI Widget Factory创建的轻量级,可换肤树形列表控件. 主页: http://www.jordivila.net/lightweight-treeli

十分钟学会Java RMI

RMI是Java平台实现远程调用的规范,下面是一个小例子,本机测试通过 一共有三个java类,远程接口,服务端程序,客户端程序 远程接口: import java.rmi.*; public interface HelloIn extends java.rmi.Remote{ String sayHello() throws RemoteException; } 服务端程序: /** * author by http://www.bt285.cn http://www.5a520.cn */ i

神速鼠标连点!制作只要十分钟!

玩游戏最常用的工具有哪些?想必当属鼠标连点,键盘连按系列了!这些个工具可算是跨时代的"低智商"发明了!今天就让按键精灵帮你解密各种奥秘吧!让你十分钟学会鼠标连点脚本! 首先打开按键精灵,选择"新建"按钮,现在看到的这个界面,就是脚本编辑器了.如下图: 图1 接下来我们先要进行一项准备工作,就是要先在脚本属性区这里,把脚本描述和热键改掉. 我的描述改成"鼠标连点",启动热键改成Ctrl+1,终止热键改成Ctrl+2.更改描述是为了我们往后更好的调用

UWP开发入门(十九)——10分钟学会在VS2015中使用Git

原文:UWP开发入门(十九)--10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开源世界的家伙们嘲笑.蜀黍我Git也是菜鸟一只(还请老司机多多指点),只会用VS2015和SourceTree这样的GUI工具点一点按钮,但是我相信用惯了SVN和TFS的童鞋们,需要一点勇气去学习一些新东西,特别是Git已经形成潮

新手RoR十分钟初体验Step By Step

http://yulimin.javaeye.com/blog/35929 关键字: rails   Ruby Rails RoR     新手RoR十分钟初体验Step By Step 声明一下,这是个新手启动的体验文章,高手不要看了...:) 1.安装RubyWindows用户去 http://rubyforge.org/ 的 http://rubyforge.org/projects/rubyinstaller/ 下载 One-Click Installer - Windows 安装即可,

Symfony学习十分钟入门经典教程_php实例

Symfony是一个强大的基于PHP的Web开发框架,在这里我们用十分钟的时间来做一个简单的增删改查的程序, 任何不熟悉Symfony的人都可以通过这个教程完成自己的第一个Symfony程序. 如果需要这个样例程序的全部源代码,可以访问 这里 ,或者通过下面的方式获取源代码: $git clone https://github.com/saharabear/symfony-sample.git 项目初始化 首先,需要你在自己的电脑中安装PHP环境并安装git.这方面的内容属于基础内容,网络上有大

10分钟学会理解和解决MySQL乱码问题

原文:10分钟学会理解和解决MySQL乱码问题 在阅读本文之前,强烈建议对字符集编码概念还比较模糊的同学 阅读下博主之前对相关概念的一篇科普:十分钟搞清字符集和字符编码 本博客已经迁移至: http://cenalulu.github.io/ 为了更好的体验,请通过此链接阅读: http://cenalulu.github.io/mysql/mysql-mojibake/ MySQL出现乱码的原因 要了解为什么会出现乱码,我们就先要了解从客户端发起请求,到MySQL存储数据,再到下次从表取回客户

五分钟学会部署OpenStack

问题描述 大家好!我是小鸥,刚刚上手学习OpenStack,今天和大家一起分享一下最近的学习心得,欢迎和我一起交流.第一讲『小鸥』教你5分钟学会部署OpenStack今天先来一个5分钟教你学会部署OpenStack,通过本次学习仅需大概1个小时就可以在VirtualBox环境中部署好一个OpenStack集群.准备环境本实验建议主机最少配置8G内存(最好16G),可以在MacOS10.7.x/10.8.x.CentOS6.4或Ubuntu12.04中运行本教程.为了在VitualBox中成功安装