2014-12-13 83 views
1

我正在尝试使用jsPlumb和jQuery-ui可拖动对象。它在很大程度上工作得很好,但我有一些看起来不太正确的东西。基本上,当我从屏幕上拖出一个元素时,它会恢复到原来的位置。不幸的是,当我恢复一个元素时,连接线留在我放弃元素的任何地方。jQuery UI-移动事件或恢复完成后调用函数

基本上这:

enter image description here

变为这样的:

enter image description here

然后,当我拖动元件节点自我纠正。我通过在这里做这个小小的代码来解决这个问题:

var outOfBounds = function(){ 
     setTimeout(function(){ 
      instance.repaintEverything(); 
     },800); 
     return isOutOfBounds(); 
    } 

    // make them draggable 
    instance.draggable($(node), {revert:outOfBounds, drag:instance.repaintEverything}); 

但是,那个setTimeout并不适合我。它似乎不是称呼这种事情的恰当地方,也不是解决问题的恰当方法。我希望在元素移动后(或同时)执行某些操作,但在文档或在线中我没有看到类似内容。似乎没有其他人甚至想要这样做。我发现最近的是this question,,但我没有使用droppable,宁愿不必添加比我需要的更多的东西到我的项目。不幸的是,可拖动对象上的拖动选项仅在被用户拖动时调用,而不是在其恢复时调用。

+1

'stop' ..? – 2014-12-13 15:40:31

+0

呵呵,这似乎工作。从文档读取的方式来看,我认为在拖动完成时调用该方法,并且在恢复发生之后不会进行。你应该把它放在真实的答案中,以便除了它。 – 2014-12-13 15:44:47

回答

1

您可以使用可拖动小部件的stop event回调触发重新绘制,因为一旦完成回复就会触发它。

instance.draggable($(node), { 
revert:isOutOfBounds, 
drag:instance.repaintEverything, 
stop:instance.repaintEverything 
}); 
+0

是的,这是最终的代码: instance.draggable($(node),{revert:outOfBounds,drag:instance.repaintEverything,stop:instance.repaintEverything}); – 2014-12-13 15:49:06

+0

@ S.Buda我认为你现在可以直接调用'isOutOfBounds',而不是'outOfBounds' ..? :) – 2014-12-13 15:54:30

+0

是的,谢谢你的建议! – 2014-12-13 15:56:44