理想的行为:
用户将项目拖动到树上。将鼠标悬停在一个封闭的节点上时,该节点将展开显示子节点。此时,用户可以继续拖动到子节点并放下任何节点。
这很好用。我使用droppables的“over”选项来扩展节点并使子节点可以删除。
但我需要添加更多功能。首先,我为draggables添加了一个帮助器。仍然工作正常。然后我将draggables和droppables放入两个不同的容器(div)。此时,帮助程序不会拖出容器。解决方案是在draggables上设置“appendTo:'body'”。好的......好吧,不太好。
现在,在当前拖动操作期间子节点不可放置。用户必须释放当前拖动并重新划分到所需的子节点。如果我删除了appendTo选项,问题就会消失,但是帮助程序不会在视觉上移动到可放置的容器中。
有什么方法可以“唤醒”这些新的droppables,使它们立即可以放置?
答案 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
,但这会给我不想要的性能损失。
我没有办法以另一种方式做到这一点。如果有一种方法可以在拖动过程中调用,只是为了刷新位置,但最好不要。