jstree 学习

最近的项目用到了jstree,由于对官方文档理解不充分,因此不少功能都是在网站上搜索再进行使用的。(我只是大天然的搬运工)node

  1. 对每一级的节点,右键后出现不一样的结果。

在jstree中右键是由 contextmenu 实现的,因此咱们须要自定义它。在这以前要在 plugins 中添加它。"plugins": ["contextmenu"]。
而后定义个函数ajax

function contextItem(node) {
        let items = {
            'item1': {
                "增长地点": {
                    "label": "增长地点",
                    "action": function (data) {
                        let inst = jQuery.jstree.reference(data.reference),
                            obj = inst.get_node(data.reference);
                        inst.create_node(obj, {}, "last", function (new_node) {
                                inst.edit(new_node);
                             
                        });
                    }
                }
            },
            'item2': {
                "删除地点": {
                    "label": "删除地点",
                    "action": function (data) {
                        let inst = jQuery.jstree.reference(data.reference),
                            obj = inst.get_node(data.reference);
                        if (confirm("肯定要删除此菜单?删除后不可恢复。")) {
                            inst.delete_node(obj);
                        }
                    }
                },
                "修改地点": {
                    "label": "修改地点",
                    "action": function (data) {
                        let inst = jQuery.jstree.reference(data.reference),
                            obj = inst.get_node(data.reference);
                        inst.edit(obj);
                    }
                }
            },
            'item3': {
                "create": null,
                "rename": null,
                "remove": null,
                "ccp": null
            }
        };
        if (node.type === '1_level') {
            items = items.item1;
        } else if (node.type === '2_level') {
            items = items.item2;
        } else {
            items = items.item1;
        }
        // console.log(node.parent.length);
        return items;
    }

最后只要把定义好的函数引用在contextmenu中就行了。函数

"contextmenu": {
                "items": contextItem,
            },

2.实现每一个节点懒加载(点到相应的节点才会发送ajax到后台,获取相应数据)。以下图
jstreeDataLoade.gif-82.9kB网站

在jstree中code

core:{
    data:DataLoader
    }

定义了DataLoader函数。blog

function DataLoader(node, render) {
    if (node.id === '#') { // 对于根节点来讲,加载一级的地区目录
        render(FakeAjaxLoadLevel1())
    } else if (node.data) {  //判断依据能够用户自定义
        switch (node.data.level) {
            case 1:
             render(FakeAjaxLoadLevel2(node.text)); // 对于一级的地区目录来讲,加载相应的市级
                break;
            case 2:
                render(FakeAjaxLoadLevel3(node.text)); // 对于二级的市级来讲,加载相应的辖区
                break;
        }
    }
}

每一节点的函数返回jstree中所需的属性,以第一级为例rem

function FakeAjaxLoadLevel1() {
    return [
        {
            text: '华东地区', id: 1, children: true,
            data: {
                level: 1
            }
        },
        {
            text: '华中地区', id: 2, children: true,
            data: {
                level: 1
            }
        }
    ];
}

3.每一层节点使用不一样的图标
types标签文档

"types": {
            "default": {
                    "icon": "fa fa-globe"
                },
             "2_level": {
                    "icon": "fa fa-home"
                },
            "3_level": {
                    "icon": "fa fa-flag"
                },
            }

只是把本身所遇到的jstree问题进行总结,持续更新ing.get

相关文章
相关标签/搜索