我有一个 jsTree,我希望它的一些节点是可移动的。不能移动根节点及其直接子节点。
我正在使用 crrm 并且它按预期工作,但它仍然允许我拖动所有节点,即使是那些无法拖放到任何地方的节点(直接在根目录下)。我根本不希望它们可拖动,即用户根本不能拾取它们。
我有一个 jsTree,我希望它的一些节点是可移动的。不能移动根节点及其直接子节点。
我正在使用 crrm 并且它按预期工作,但它仍然允许我拖动所有节点,即使是那些无法拖放到任何地方的节点(直接在根目录下)。我根本不希望它们可拖动,即用户根本不能拾取它们。
在当前版本的 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。
问了类似的问题,请查看我的答案: dnd,如何限制删除某些节点类型?
crrm.move.check_move 函数需要进行某种类型的气味测试。你的情况,这将是根和第一个孩子。
我想你需要的是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
}
}