2011-01-13 126 views
5

期望的行为:Drag Drag拖拽时添加拖拽

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

这工作正常。我使用droppables的“over”选项来扩展节点并让孩子落下。

但我需要添加一些更多的功能。首先,我添加了一个可拖动的助手。仍然正常工作。然后,我把可拖放和拖放到两个不同的容器(div)中。此时,助手不会拖出容器。解决方案是在可拖动表上设置“appendTo:body”。所有的好...好吧,不是。

现在在当前拖动操作过程中子节点是而不是可放置。用户必须释放当前的拖动并将redrag放入所需的子节点。如果我删除appendTo选项,问题就消失了,但助手不会直观地进入可拖放容器。

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

回答

6

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

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足够长的新droppables加入当前的阻力。在整个拖动过程中,您也可以将refreshPositions选项设置为true,但它会导致我不想要的性能损失。

我没有找到一种方法来做另一种方式。如果在拖动期间有一种方法可以调用来刷新仓位,那最好,但是没有。