jstree delete_node()未删除

时间:2015-07-30 05:11:36

标签: javascript jquery jstree

我一直在拼凑一个函数,为不同的节点组合一个自定义上下文菜单。好吧,到目前为止,很好地获得了不同的标签以显示文件夹或文件的点击,但实际上没有那么多删除它们。

看一看。我不得不......做一些hacky解决方法因为我无法使node.hasClass(' jstree-open')yada yada工作正常,但这通常会起作用到那个应该删除

的位
function customMenu(node) {
            //Show a different label for renaming files and folders
            var ID = $(node).attr('id');
            if (ID == "j1_1") {
                return items = {}; //no context menu for the root
            }
            var $mynode = $('#' + ID);
            var renameLabel;
            var deleteLabel;
            var folder = false;
            if ($mynode.hasClass("jstree-closed") || $mynode.hasClass("jstree-open")) { //If node is a folder
                renameLabel = "Rename Folder";
                deleteLabel = "Delete Folder";
                folder = true;
            }
            else {
                renameLabel = "Rename File";
                deleteLabel = "Delete File";
            }
            var items = {
                "rename" : {
                    "label" : renameLabel, 
                    "action": function (obj) {
                         //nothing here yet.
                    }
                },
                "delete" : {
                    "label" : deleteLabel,
                    "action": function (obj) {
                        //tree.delete_node($(node));
                        //this.remove(obj);
                        //$('#treeView').jstree('remove', $(node));
                        //nothing is working.
                    }
                }
            };

            return items;
        }

为方便起见,我为小提琴做了一个小提琴:http://jsfiddle.net/dpzy8xjb/ 我不认为我真的需要说我没有超级经验的jQuery或处理第三方API,所以......要温柔。

4 个答案:

答案 0 :(得分:2)

请使用tree.delete_node([node]);进行删除。

Updated Fiddle

修改

您所做的代码与node相同。

        var ID = $(node).attr('id');
        var $mynode = $('#' + ID);

它是同一个对象节点。

答案 1 :(得分:1)

我向上帝发誓,除了在StackOverflow上发布问题之外,没有任何事情可以让我更快地找出问题。

修正:

       "delete": {
            "label": deleteLabel,
                "action": function (obj) {
                //tree.delete_node($(node));
                tree.delete_node($mynode); //<<--works.
        }

答案 2 :(得分:0)

我遇到了这个问题,所有的解决方案均无效。正如文档所述:

  

禁止对树的所有修改(创建,重命名,移动,删除)。要启用它们,请将core.check_callback设置为true。

就我而言,我有一个check_callback函数(我正在使用拖放),该函数在删除节点时返回false

我已经将它调整为“ delete_node”:

check_callback: function(operation, node, parent, position){
        if(operation == 'delete_node'){
            return true;
        }
        // ... rest of the code

}

答案 3 :(得分:0)

除非将core.check_callback设置为true,否则无法删除节点。