2016-04-15 73 views
0

我试图防止删除jstree中的根节点。在早期版本存在的before.jstree事件,与你可以做这样的:将函数附加到.jstree

.on("before.jstree", function (e, data) { 
    if(data.func === "delete_node") { 
     if (data.node.type == "root_node" || true) 
     { 
      e.stopImmediatePropagation(); 
      return false; 
     } 
    } 
}) 

但由于before.jstree方法已在jstree 3(https://www.jstree.com/api/)被切断,这种方法行不通了。有没有一个替代解决方案没有操纵contextmenu事件?

+0

如何删除节点?它是一个上下文菜单吗?如果选择了根节点,您可以隐藏该选项吗? –

回答

1

您可以使用jstree.core.check_callback属性来实现此目的。该属性在每个jstree事件触发器之前计算,并且它期望一个布尔值 - true继续调用事件处理程序,并且false将其阻塞。
您可以附加此属性的回调函数,并根据所触发的事件作出决定。在你的情况下,如果触发的事件是delete_node并且事件目标节点是根目录,则可以返回false来阻止该事件。

$('#tree').jstree({ 
    'core' : { 
     'check_callback' : function (operation, node, node_parent, node_position, more) { 
      if ((operation == "delete_node" && node.type && node.type == "root") { 
       return false; 
      } 
      return true; 
     } 
    } 
}); 
+0

@ kayess:感谢您的建议。编辑我的答案添加一个解释。 –