jstree delete_node() 没有删除

jstree delete_node() is not deleting

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

看看。我不得不...做一些棘手的解决方法,因为我无法让 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;
        }

为了方便起见,我整理了一个 fiddle:http://jsfiddle.net/dpzy8xjb/ 我不认为真的需要说我在 jQuery 或处理第三方 API 方面不是很有经验,所以...请保持温和。

我向上帝发誓,没有什么比在 Whosebug 上发布问题更能让我更快地解决问题了。

固定:

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

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

Updated Fiddle

编辑:

您所做的代码与node相同。

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

同一个对象节点

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

all modifications to the tree are prevented (create, rename, move, delete). To enable them set core.check_callback to true.

在我的例子中,我有一个 check_callback 函数(我正在使用拖放),它在删除节点时返回 false

我已经将它调整为 'delete_node' 像这样:

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

}

无法删除节点,除非 core.check_callback 设置为 true