在我的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/
答案 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”。