2014-06-11 3 views
3

jsPlumb을 사용하는 동안 중복 연결 (동일한 원본과 대상을 가진 2 개의 연결)을 피하려고합니다. jsPlumb.js 자체를 수정하지 않고도 그렇게 할 수 있습니까?jsPlumb 중복 연결을 제거하는 방법

http://jsfiddle.net/uQdfq/
(2 회task3task1에서 드래그) 나는 (1)처럼 특정 엔드 포인트를 추가 할 수있는 제한이하지 않으려는

.

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

기능 자체 :

이 전체 사업부가 아닌 일부 엔드 포인트 소스/대상이 될 수있다 -

.task

는이 호출 가능 대상/소스로 정의된다
// 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 ((conr.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는 끝점을 제거하지 않으려했지만 시나리오가 다를 수 있습니다. –

관련 문제