在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语句。

 .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语句而不是children因为我需要向下钻取多个级别来查找图像。 一旦我能够从if语句产生一个真实的结果,我意识到我得到的错误来自我的if语句的}else{}部分。 回归true; 是导致错误的原因。 没有任何东西需要返回才能继续删除。

现在它就像一个魅力。