2014-06-11 3 views
3

Я пытаюсь избежать дублирования соединений (2 соединения с одним и тем же источником и целью) при использовании jsPlumb. Есть ли способ сделать это без необходимости изменять сам jsPlumb.js?jsPlumb как удалить повторяющиеся соединения

http://jsfiddle.net/uQdfq/
(сопротивление от task1 до task3дважды)

Я не хочу, чтобы ограничения добавления конкретных конечных точек, как в (1).

Мои .task с определены как возможные цели/источника, когда их называют - то есть весь 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 никогда не хотел удалять конечные точки, ваш сценарий может быть другим. –

Смежные вопросы