FancyTree:拖动到根级别时节点对象不正确

时间:2014-10-03 01:22:55

标签: javascript fancytree

我正在尝试在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);功能。

找出节点是否已被拖动到根目录的正确方法是什么?

2 个答案:

答案 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)

您可以删除beforeover(i.a。作为其子节点)。 (您永远不会将根节点作为目标,因为您不会看到它)。 如果您记录node.titlenode.hitModenode.getLevel(),事情可能会变得清晰......