禁用拖动从某个级别拖放到另一个级别

时间:2015-07-09 07:35:42

标签: jstree jstree-dnd

我已经从形成了一个树视图,我想禁用拖动节点从一个级别到另一个级别。让我们举一个例子:

  • 分行1
    • leaf 1
    • leaf 2
    • leaf 3
  • 分行2
    • leaf 4
    • leaf 5
  • 分行3
    • leaf 6
    • leaf 7
  • 分行4
    • leaf 8

我希望用户能够移动分支/重新排序叶子&重新订购分支,但不会将leaf宣传为branch或将branch降级为leaf

我已经开始查看档案jstree.dnd.js来改变档案,但遗憾的是它已经退出了我的联盟。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

您可以使用jstree types插件。只需将其包含在config plugins数组中即可。然后相应地配置节点(为节点分配类型,确保它在JSON中具有type属性)。

以下是配置示例:

"types" : {
    "#" : { // the root node can have only "branch" children
        "valid_children" : ["branch"]
    },
    "branch" : { // any "branch" can only have "leaf" children
        "valid_children" : ["leaf"]
    },
    "leaf" : { // "leaf" typed nodes can not have any children
        "valid_children" : []
    }
},

这是一个演示:
http://jsfiddle.net/DGAF4/560/

您可以在repo和docs页面上阅读有关类型插件的更多信息。

请记住,您可以使用core.check_callback功能并避免使用类型插件 - 它将为您提供完全手动控制,但使用起来有点复杂。如果上述因某些原因不适合你,我可以详细说明。

答案 1 :(得分:0)

恕我直言,不使用类型插件的解决方案确实要简单得多。您只需要检查父ID:

$('#jstree').jstree({
    'core': {
        'check_callback' : function (operation, node, node_parent, node_position, more) {
            if (operation === 'move_node' && node.parent !== node_parent.id) {
                return false;
            }

            return true;
        }
    },
    'plugins': ['dnd']
});