调整jstree中的contextmenu

时间:2014-12-19 11:21:06

标签: contextmenu jstree

我想使用contextmenu插件执行以下操作: - 重命名"创建" as"添加" - 删除"编辑"

如何做到这一点?

我不想创建自定义菜单,因为我只获得一个节点,而不是可以在创建,重命名和删除事件中使用的漂亮数据对象。

1 个答案:

答案 0 :(得分:2)

在jstree本身的代码中找到答案: 将此添加到jstree代码:

    "contextmenu": {
        items: customContextMenu
    }

这对于上下文菜单项:

function customContextMenu() {

    'use strict';

    var items = {
            "create" : {
                "separator_before": false,
                "separator_after": true,
                "_disabled": false, //(this.check("create_node", data.reference, {}, "last")),
                "label": "Add",
                "action": function (data) {
                    var inst = $.jstree.reference(data.reference),
                        obj = inst.get_node(data.reference);
                    inst.create_node(obj, {}, "last", function (new_node) {
                        setTimeout(function () { inst.edit(new_node); }, 0);
                    });
                }
            },
            "rename" : {
                "separator_before": false,
                "separator_after": false,
                "_disabled": false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")),
                "label": "Rename",
                "action": function (data) {
                    var inst = $.jstree.reference(data.reference),
                        obj = inst.get_node(data.reference);
                    inst.edit(obj);
                }
            },
            "remove" : {
                "separator_before": false,
                "icon": false,
                "separator_after": false,
                "_disabled": false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),
                "label": "Withdraw",
                "action": function (data) {
                    var inst = $.jstree.reference(data.reference),
                        obj = inst.get_node(data.reference);
                    if (inst.is_selected(obj)) {
                        inst.delete_node(inst.get_selected());
                    } else {
                        inst.delete_node(obj);
                    }
                }
            }
        };

    return items;
}