7

在我的 jstree 中,我有一个 Root 节点,它是所有节点的父节点。我用过 dnd 插件。我想允许拖放树中的任何位置,但只能在根内部,即不能在根之前或之后。

- [Root]
   - Node 1
      - Node 1.1
      - Node 1.2
   + Node 2
   - Node 3
      + Node 3.1

在与论坛核实后,我发现该drag_check事件仅适用于外部节点,而不适用于树中的任何节点。要验证相同的树节点,我们需要使用crrm -> check_move事件。那就是我需要帮助的地方。如果节点在 之前或之后被删除,我想返回 false [Root]

这是开始的小提琴 - http://jsfiddle.net/juyMR/23/

4

4 回答 4

7

在当前版本的 jstree (3.0.1) 中有一个更简单的解决方案,你必须使用的一切是

"types" : {     
       "#" : {
            "max_children" : 1
        }
    },

If you are using the type plugin there are two predefined types. One is the "#" used above. This is automatically used for the "real" root element of the tree, which means the one which is internally used. So if you are adding your own root as the first node without any extra config everything will work fine.

于 2014-06-16T09:35:34.137 回答
3

你很接近,你只需要一个 else 语句来返回 true

http://jsfiddle.net/blowsie/juyMR/59/

 "crrm" : {
        "move" : {
            "check_move" : function (data) {
               // alert(data.r.attr("id"));
                if(data.r.attr("id") == "999") {
                    return false;
                }
                else {
                    return true;
                }
            }
        }
    },
于 2013-02-14T16:26:00.523 回答
2

这可以开箱即用,无需任何附加功能:

$("#tree").jstree({
    "types" : {     
        "valid_children" : [ "root" ], //<== THIS IS THE IMPORTANT ONE !
                    "types" : {
                              "default" : {
                                    "valid_children" : "none"
                              },
                              "root" : {
                                    "valid_children" : "default"
                              }
                              }
              }
});

您可以在每个节点类型中提及“valid_children”,但也可以提及更高级别(查看上面的代码,其中显示“这是最重要的一个”。

这将全局只允许您的节点类型 ROOT 有孩子,这意味着您不能将任何东西移出根,但可以在根树内的任何地方移动。

于 2014-03-20T11:38:58.520 回答
1

查看 data.o(源节点)和 data.np(节点父节点)并在 crrm check_move 中检查它们的 ID。查看小提琴示例,不允许 data.np.attr("id") 等于“jsTreeDiv”。

于 2012-10-26T13:19:49.607 回答