使用jstree我想限制树的深度,不允许在某些节点上掉落。
这是我的(简化)代码:
$('#tree').jstree({
"plugins":["dnd"],
"core":{
"check_callback":true
},
"dnd":{
"copy":false
}
}).on("move_node.jstree", function(node,nodes){
console.log("node : "+nodes.node.id);
console.log("parent : "+nodes.node.parent);
console.log("position : "+nodes.position);
});
我找到了有关旧版本但不是jstree 3的文档
我尝试了经典的回归虚假;在move_node函数的某些条件下 - 它不会改变任何东西。 所以我想我的问题就是:如何在某些条件下禁用move_node - 最好的方法是不允许在某些节点上拖动(即不显示它们前面的三角形 - 以及红色十字而不是绿色标记) 当然,这些节点仍然可以拖动,并且像任何其他节点一样。
答案 0 :(得分:1)
在jsTree中使用"类型"插件可以限制丢弃到某些节点,您可以在其中指定任何节点并给出允许的子节点数,通过设置参数来允许节点内允许的最大节点深度,例如" max_children"," max_depth& #34;," valid_children"。
选中此Demo作为参考。
在最新的jsTree v3 +中,这"类型"插件未在dnd插件中完全实现。
如果您看到源代码行号5036(在dnd插件中),则会有评论,例如,
// TODO: now check works by checking for each node individually, how about max_children, unique, etc?
// TODO: drop somewhere else - maybe demo only?
因此需要等待jsTree的下一个版本。
答案 1 :(得分:1)
This答案应该是解决问题的方法。
您应该使用check_callback
函数来实现从一个父节点到另一个父节点的节点的选择性。
答案 2 :(得分:0)
另一个解决方案是编写一个jstree插件,例如:
$.jstree.plugins.myPlugin = function (options, parent) {
this.check = function (chk, obj, par, pos, more) {
if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
if ( 'put here your condition to block dropping' ) {return false}
return true;
};
};
然后将'myPlugin'添加到jstree实例创建中的插件列表中。