在jsTree中,如果不为空,如何防止删除文件夹

时间:2013-06-06 21:49:57

标签: jquery jstree

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

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

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

如果文件夹中包含这些相同的图像,则将删除包含所有图像的文件夹。

有关如何防止删除非空文件夹的任何建议 - 包含图片吗?

我尝试在“types”“delete_node”中放置一个函数,但是我很难识别要删除的文件夹。我使用$(这个)没有运气。

这是我最近的尝试。尝试在发送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 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;
           }
    }
})

1 个答案:

答案 0 :(得分: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;是导致错误的原因。无需返回任何内容即可继续删除。

现在它就像一个魅力。