我有一棵由代表图像(而不是文档)的文件夹和文件组成的树。

我试图防止在允许添加,重命名,移动和删除文件夹的同时删除图像。

使用jsTree类型,我可以防止删除图像,但是如果图像位于文件夹中则不能。

如果这些相同的图像位于文件夹中,则该文件夹将与所有图像一起删除。

关于如何防止删除非空文件夹(其中有图像)的任何建议?

我试图在“类型”“delete_node”中放一个函数,但是我很难确定要删除的文件夹。我没有使用$(this)的运气。

这是我最近的尝试。尝试在发送delete_node之前测试图像-

.bind("before.jstree", function (e, data) {
   if(data.func === "delete_node") {
       if ($(e.currentTarget).find("[rel='imgIR']")){    // rel='imgIR' identifies images
           alert("Folder must be empty to delete it.");
           e.stopImmediatePropagation();
           return false;
       } else {
          return true;
       }
    }
})

它的工作原理是阻止它删除。但是无论有没有图像,它每次都会停止删除。

当我将(e.currentTarget).html()发送到控制台日志时,将包括整个树,而不仅仅是要删除的文件夹。而且我找不到选择特定文件夹的方法。

我正在使用的插件是:
"plugins" : [ "html_data", "types", "themes", "ui", "crrm", "contextmenu", "dnd" ]

任何和所有帮助将不胜感激。谢谢!

*好的,我取得了一些进步,但是又遇到了新的挫折。

使用Array.prototype.slice.call(arguments,1),我终于能够找到data.args [0] [0]给我特定的节点。但是现在我从jquery.jstree.js第234行遇到了一个错误,我坚持了下来。

错误:未被捕获的TypeError:Function.prototype.apply:参数列表具有错误的类型

这是我的代码现在的样子。错误出现在if语句的内部。
.bind("before.jstree", function (e, data) {
   if(data.func === "delete_node") {
       var node = data.args[0][0];
           if ($(node).children('li[rel="imgIR"]').length != 0){    // rel='imgIR' identifies images
               alert("Folder must be empty to delete it.");
               e.stopImmediatePropagation();
               return false;
           } else {
          return true;
           }
    }
})

最佳答案

解决了!

现在,我可以测试文件夹中的图像条目,然后再将其删除。实际上,可以在删除文件夹之前将其用于测试其他任何元素。

.bind("before.jstree", function (e, data) {
   if(data.func === "delete_node") {
       var node = data.args[0][0];
           if ($(node).find('li[rel="imgIR"]').length != 0){    // rel='imgIR' identifies images
               alert("Folder must be empty to delete it.");
               e.stopImmediatePropagation();
               return false;
       }
   }
})

首先,我将if语句更改为find而不是children,因为我需要向下钻取多个级别才能找到图像。一旦我能够从if语句中得出真实的结果,我就意识到我得到的错误来自于}else{}语句的if部分。返回true;是导致错误的原因。删除前不需要返回任何内容。

现在,它就像一种魅力。

10-07 16:21
查看更多