5

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

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

使用 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 行收到了一个错误,我一直坚持。

错误:Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type

这是我的代码现在的样子。错误出现在内部 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;
           }
    }
})
4

1 回答 1

1

解决了!

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

.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;是导致错误的原因。删除继续进行,无需返回任何内容。

现在它就像一个魅力。

于 2013-06-07T18:08:51.543 回答