4

我有一个 jsTree,我希望它的一些节点是可移动的。不能移动根节点及其直接子节点。

我正在使用 crrm 并且它按预期工作,但它仍然允许我拖动所有节点,即使是那些无法拖放到任何地方的节点(直接在根目录下)。我根本不希望它们可拖动,即用户根本不能拾取它们。

4

3 回答 3

16

在当前版本的 jsTree (3.0.8) 中,您可以这样做:

$('#my_jstree')
            .jstree({
                "core" : {
                    "check_callback" : true
                },
                "dnd" : {
                    "is_draggable" : function(node) {
                        console.log('is_draggable called: ', node[0]);
                        if (node[0].type != 'MY-DRAGGABLE-TYPE') {
                            alert('this type is not draggable');
                            return false;
                        }
                        return true;
                    }
                },
                "types" : {
                    "default" : {
                        "icon" : "glyphicon glyphicon-flash"
                    },
                    "MY-DRAGGABLE-TYPE" : {
                        "icon" : "glyphicon glyphicon-info-sign"
                    }
                },
                "plugins" : [ "dnd", "types" ]})

使用 is_draggable 函数和 types 插件来控制可以拖动的内容。如果您想查看我使用的图标,包括 bootstrap 的 glyphicons 样式表。此处的代码假设您的 HTML 中已经有 jstree 的 div 和列表。如果有人看不懂上面的代码,我会发布一个 plunkr。

编辑 - 为防止掉落,请执行以下操作:

"core" : {
                    "check_callback" : function(operation, node, node_parent, node_position, more) {
                        if (operation == 'move_node') {
                            console.log(node_parent);
                            if (node_parent.type == 'MY-DROPPABLE-TYPE') {
                                return true
                            } else
                                return false;
                        }
                    }
                },

使用 check_callback 函数来筛选 droppable 的类型。使用 node_parent 来获取 droppable。

于 2015-01-03T00:33:47.733 回答
0

问了类似的问题,请查看我的答案: dnd,如何限制删除某些节点类型?

crrm.move.check_move 函数需要进行某种类型的气味测试。你的情况,这将是根和第一个孩子。

于 2012-06-25T16:40:12.160 回答
0

我想你需要的是drag_check

 "dnd"  :   {

        "drop_target"   :   false,


        "drag_check"    :   function(data)

        {  
          if( data.r.attr("id") ==  ... ) 
                    return false;
           //if you want to enable drag for certain nodes  return following
           return {
                    after : true,
                    before : false,
                    inside : false
                }
          }
于 2012-08-17T07:09:21.503 回答