jstree在root之前和之后拖放限制节点

时间:2012-10-23 06:08:19

标签: javascript jquery tree jstree drag-and-drop

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

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

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

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

4 个答案:

答案 0 :(得分:7)

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

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

如果您使用的是类型插件,则有两种预定义类型。一个是"#"用于上面。这自动用于"真实"树的根元素,表示内部使用的元素。因此,如果您将自己的root添加为第一个节点而没有任何额外的配置,一切都会正常工作。

答案 1 :(得分: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;
                }
            }
        }
    },

答案 2 :(得分:2)

这可以在没有任何附加功能的情况下开箱即用:

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

你可以提及&#34; valid_children&#34;在你的每个节点类型中,但也高一级(请查看上面的代码&#34;这是重要的一个&#34;。

这将全局仅允许您的节点类型ROOT拥有子节点,这意味着您不能从根节点移动任何内容,而是在根树中的任何位置移动。

答案 3 :(得分:1)

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