我正在尝试在dragdrop事件之后为节点定义新的父ID。
假设您将节点拖到除根
之外的任何级别,此函数可以正常工作dragDrop: function(node, data) {
/** This function MUST be defined to enable dropping of items on
* the tree.
*/
data.otherNode.moveTo(node, data.hitMode);
// Set Parent ID with id of parent
data.otherNode.data.parent_id = node.data.id;
}
然而,当将节点拖到根节点时,它会从其他地方获取一个id(我还没有想出该模式)。
我一直在监视fancytree node.key(显示父节点的密钥),它总是输出key_2
,而不是root_1
,当我输出树时,它是root的值使用tree.toDict(true);功能。
找出节点是否已被拖动到根目录的正确方法是什么?
答案 0 :(得分:3)
正如mar10所提到的,你永远不会将不可见的系统根节点作为dragDrop事件的目标节点。因此,您永远不会达到0级。
节点总是丢弃"超过","之前"或"之后"另一个节点,由node.hitMode
表示的内容。
如果您只是想阻止将某个节点放入第一级(我认为这就是您所谓的根级别),而只是"进入"文件夹,限制hitMode如:
dragEnter: function(node, data) {
if(node.folder == false) {
return false;
}
return 'over';
}
如果要检查dragDrop事件中的第一个(根)级别,可以执行以下操作:
dragDrop: function(node, data) {
if (node.getLevel() == 1 && (data.hitMode == 'after' || data.hitMode == 'before')) {
console.log('dropped into first level');
}
}
如果您的问题针对其他问题,请修改您的问题或发表评论。
答案 1 :(得分:0)
这是预期的行为:
var tree = $(":ui-fancytree").fancytree("getTree");
tree.rootNode.getLevel() // == 0 (invisble system root)
tree.rootNode.getFirstChild().getLevel() // == 1 (visible top level node)
您可以删除before
或over
(i.a。作为其子节点)。 (您永远不会将根节点作为目标,因为您不会看到它)。
如果您记录node.title
,node.hitMode
和node.getLevel()
,事情可能会变得清晰......