2014-06-11 81 views
3

我試圖避免在使用jsPlumb時有重複的連接(2個連接具有相同的源和目標)。有沒有辦法做到這一點,而不必修改jsPlumb.js本身?jsPlumb如何刪除重複的連接

http://jsfiddle.net/uQdfq/
(拖動從task1task3兩次

我不希望有添加特定端點像(1)的限制。

.task s的定義爲可能的目標/源被調用時 - 這是整個DIV可以是源/目標,而不只是一些端點:

addTask($('#project1'), 'task' + 1); 

功能本身:

// Adds a task div to the specific project 
function addTask(parentId, id) { 
    var newState = $('<div>').attr('id', id).addClass('task') 

    // A title for the task 
    var title = $('<div>').addClass('title').text(id); 
    newState.append(title); 

    $(parentId).append(newState); 

    // Makes the task div a possible target (i.e. connection can be dragged to) 
    jsPlumb.makeTarget(newState, { 
    anchor: 'Continuous' 
    }); 

    // Makes the task div a possible source (i.e. connection can be dragged from) 
    jsPlumb.makeSource(newState, { 
    anchor: 'Continuous' 
    }); 
} 

什麼是最好的方式來添加一些條件,停止創建重複連接的可能性。

+0

http://jsfiddle.net/LrjEC/ –

回答

4
jsPlumb.bind('connection',function(info){ 
var con=info.connection; 
var arr=jsPlumb.select({source:con.sourceId,target:con.targetId}); 
if(arr.length>1){ 
    jsPlumb.detach(con); 
} 
}); 

每當創建一個新的連接,請檢查是否有一個已經具有相同源&目標存在,如果是,那麼卸下新的。

+0

謝謝。非常便利。我做了一個小小的調整,以便它也檢查當前源是否是當前目標的目標(所以基本上你不能進行反向連接),即:var arr2 = jsPlumb.select( {source:con.targetId,target:con.sourceId});'然後我只需要做'if(arr.length + arr2.length> 1)' –

+0

這不是正確答案,因爲detach(con)不會在某些情況下正確刪除所有端點:http://www.jsplumb.org/doc/removing.html。更好的方法是在首先進行連接之前進行檢查。請參閱:http://stackoverflow.com/questions/22959893/jsplumb-dragging-new-connection-should-remove-existing-one – user590849

+0

@ user590849 OP從不想刪除端點,您的方案可能會有所不同。 –