拖动拖动时添加Droppables

时间:2011-01-13 02:26:35

标签: jquery jquery-ui draggable droppable

理想的行为:

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

这很好用。我使用droppables的“over”选项来扩展节点并使子节点可以删除。

但我需要添加更多功能。首先,我为draggables添加了一个帮助器。仍然工作正常。然后我将draggables和droppables放入两个不同的容器(div)。此时,帮助程序不会拖出容器。解决方案是在draggables上设置“appendTo:'body'”。好的......好吧,不太好。

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

有什么方法可以“唤醒”这些新的droppables,使它们立即可以放置?

1 个答案:

答案 0 :(得分: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);

这使得可拖动的refreshPositions选项true足够长,以便新的droppable加入当前拖动。在整个拖动期间,您还可以将refreshPositions选项设为true,但这会给我不想要的性能损失。

我没有办法以另一种方式做到这一点。如果有一种方法可以在拖动过程中调用,只是为了刷新位置,但最好不要。