5

期望的行为:

用户将项目拖到树上。将鼠标悬停在关闭的节点上时,该节点会展开并显示子节点。此时,用户可以继续拖动到子节点并放在其中的任何一个上。

这工作正常。我使用 droppables 的“over”选项来扩展节点并使子节点可放置。

但我需要添加更多功能。首先,我为可拖动对象添加了一个助手。仍然工作正常。然后我将 Draggables 和 droppables 放入两个不同的容器(div)中。此时,助手不会拖出容器。解决方案是在可拖动对象上设置“appendTo:'body'”。一切都好……嗯,不完全是。

现在子节点在当前拖动操作期间不可放置。用户必须释放当前拖动并重新拖动到所需的子节点。如果我删除 appendTo 选项,问题就会消失,但是助手不会在视觉上移动到可放置容器中。

有什么方法可以让我“唤醒”这些新的 droppables 以使它们立即 droppable?

4

1 回答 1

6

这就是我解决几乎相同问题的方法。在我的情况下,当我在拖动可拖动时切换节点打开时,子项通过 ajax 加载,然后它们被初始化为 droppables。然后我必须这样做:

ui.draggable.draggable('option', 'refreshPositions', true);
var tempFunc = function() {
    if (ui.draggable) {
        ui.draggable.off('drag', tempFunc);
        setTimeout(function() {
            ui.draggable.draggable('option', 'refreshPositions', false);
        }, 100);
    }
};
ui.draggable.on('drag', tempFunc);

这使得draggable 拥有足够长的refreshPositions选项,true以便新的droppables 加入当前的拖动。您也可以refreshPositions选择true在整个拖动过程中进行,但这会带来我不想要的性能损失。

我没有找到以另一种方式做到这一点的方法。如果有一种方法可以在拖动过程中调用以刷新位置,那将是最好的,但没有。

于 2012-10-18T06:03:18.973 回答