在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;
是导致错误的原因。 没有任何东西需要返回才能继续删除。
现在它就像一个魅力。