jstree 3 - dnd - 限制丢弃到某个节点

时间:2014-06-06 13:25:24

标签: jquery drag-and-drop jstree

使用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 - 最好的方法是不允许在某些节点上拖动(即不显示它们前面的三角形 - 以及红色十字而不是绿色标记) 当然,这些节点仍然可以拖动,并且像任何其他节点一样。

3 个答案:

答案 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实例创建中的插件列表中。