2

我正在尝试在拖放事件之后为节点定义新的父 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 (它显示了父节点的键),当我使用 tree.toDict(true); 输出树时,它总是输出key_2而不是root 的值;root_1功能。

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

4

2 回答 2

4

正如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');
        }
}

如果您的问题针对其他问题,请编辑您的问题或发表评论。

于 2014-10-07T20:24:42.523 回答
0

这是预期的行为:

var tree = $(":ui-fancytree").fancytree("getTree");
tree.rootNode.getLevel() // == 0 (invisble system root)
tree.rootNode.getFirstChild().getLevel() // == 1 (visible top level node)

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

于 2014-10-06T16:50:16.953 回答