码迷,mamicode.com
首页 > 其他好文 > 详细

【EasyUI】Tree的使用

时间:2015-08-13 17:41:38      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

先看效果

技术分享

一、html元素

在html页面中为两棵树创建两个div

技术分享
<div id="dlg-preview" class="easyui-window" style="width:580px;height:420px;" closed="true">
    <div style="padding:16px;width:251px;float:left;overflow:auto;height:348px;">
        <div id="role_list">
            <ul id="role" class="easyui-tree"></ul>
        </div>
    </div>
    <div style="padding:16px;width:251px;float:right;overflow:auto;height:348px;">
        <div id="auth_list">
            <ul id="auth" class="easyui-tree"></ul>
        </div>
    </div>
</div>
View Code

注意:EasyUI树使用的父标签是<ul/>

二、节点初始化

现在要用json数据初始化这个<ul/>标签,以第一级“角色”根目录为例,json数据格式如下:

技术分享
[{"id":"0","parent":null,"text":"角色","children":null,"childrenCount":null,"level":"0","attributes":null ,"state":"closed","checked":null,"type":null}]
View Code

根节点的初始化一般是固定的,所以你可以写一个对象而不用去数据库查询。接下来就开始一级一级初始化,每一级数据都是从不同地方(数据表)查询来的,而关键就在于初始化树时的onBeforeExpand事件。

在准备打开一级节点时改变这个节点的url(很有可能需要根据该节点类型来设置),从而获取所需数据。完整的初始化代码如下:

技术分享
//初始化数据权限列表
authority_user.initAuthList = function(row) {
    $("#auth").tree(‘collapseAll‘);
    $("#auth").tree({
        url : BasePath + "/authority_user/auth_tree?userId=" + row.userId,
        animate : true,
        lines : true,
        method : ‘GET‘,
        formatter:function(node){
            var s = node.text;
            if (node.children){
                s += ‘&nbsp;<span style=\‘color:blue\‘>(‘ + node.children.length + ‘)</span>‘;
            } else {
                if(node.state == ‘state‘) {
                    s += ‘&nbsp;<span style=\‘color:blue\‘>( )</span>‘;
                }
            }
            return s;
        },
        onBeforeExpand:function(node,param){
            var url = BasePath + "/authority_user/auth_tree?userId=" + row.userId + "&type=" + node.type + "&level=" + node.level;
            $(‘#auth‘).tree(‘options‘).url = url;
        }, 
        onClick : function(node) {
            if (node.state && node.state == ‘closed‘) {
                $(this).tree(‘expand‘, node.target);
            } else {
                $(this).tree(‘collapse‘, node.target);
            }
        }
    });
};
View Code

三、后台查询数据

用于初始化节点的数据是一个个对象,Controller返回List即可。只是节点对象的属性名称有约束:

技术分享
public class TreeModel {
    private String id;
    private String parent;
    private String text;
    private String children;
    private String childrenCount;
    private String level;
    private String attributes;
    private String state;
    private String checked;
    private String type;
    
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getChildrenCount() {
        return childrenCount;
    }
    public void setChildrenCount(String childrenCount) {
        this.childrenCount = childrenCount;
    }
    public String getChecked() {
        return checked;
    }
    public void setChecked(String checked) {
        this.checked = checked;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getAttributes() {
        return attributes;
    }
    public void setAttributes(String attributes) {
        this.attributes = attributes;
    }
    public String getParent() {
        return parent;
    }
    public void setParent(String parent) {
        this.parent = parent;
    }
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
    public String getChildren() {
        return children;
    }
    public void setChildren(String children) {
        this.children = children;
    }
    public String getLevel() {
        return level;
    }
    public void setLevel(String level) {
        this.level = level;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
}
View Code

官方文档提到,每个节点都具备以下属性:

  • id:节点ID,对加载远程数据很重要。

  • text:显示节点文本。

  • state:节点状态,‘open‘ 或 ‘closed‘,默认:‘open‘。如果为‘closed‘的时候,将不自动展开该节点。

  • checked:表示该节点是否被选中。

  • attributes: 被添加到节点的自定义属性。

  • children: 一个节点数组声明了若干节点。

所以节点对象要与之对应。

下面以根节点为例,说明获取数据的方式:

技术分享
/**
     * 生成用户角色目录树
     * @author yang.wei
     * @time 2015-7-23
     * @param id
     * @param req
     * @return List<TreeModel>
     */
    @RequestMapping(value = "/role_tree")
    @ResponseBody
    public List<TreeModel> roleTree(String level, String userId, String roleId, String systemId,String menuId, String moduleId, HttpServletRequest req)throws ManagerException {
        List<TreeModel> list = null;
        if (level == null) {
            list = new ArrayList<TreeModel>(1);
            TreeModel one = new TreeModel();
            one.setId("0");
            one.setText("角色");
            one.setState("closed");
            one.setLevel("0");
            list.add(one);
        }
        //查询用户拥有的角色列表,参数:userId
        if ("0".equals(level)) {
            list = this.authorityUserManager.getUserRoleList(userId);
        }
        //查询角色拥有的系统,参数:roleId
        if ("1".equals(level)) {
            list = this.authorityUserManager.getRoleSystemList(roleId);
        }
        //查询系统拥有的菜单,参数:roleId,systemId
        if ("2".equals(level)) {
            list = this.authorityUserManager.getSystemMenuList(roleId,systemId);
        }
        //查询菜单拥有的模块,参数:roleId,systemId,menuId
        if ("3".equals(level)) {
            list = this.authorityUserManager.getMenuModuleList(roleId,systemId,menuId);
        }
        //查询模块拥有的按钮,参数:roleId,systemId,moduleId
        if ("4".equals(level)) {
            list = this.authorityUserManager.getModuleOperList(roleId,systemId,moduleId);
        }
        return list;
    }
View Code

实际过程中你需要根据每个节点的属性获取不同的数据。

【EasyUI】Tree的使用

标签:

原文地址:http://www.cnblogs.com/ywlaker/p/4727736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!