2014-12-13 33 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