jsPlumb как удалить повторяющиеся соединения

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

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'
  });
}

Что было бы лучшим способом добавить какое-то условие, которое останавливает возможность создания дубликатов соединений.


person Serge P    schedule 11.06.2014    source источник
comment
jsfiddle.net/LrjEC   -  person Kyle_at_NU    schedule 11.06.2014


Ответы (1)


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);
 }
});

Всякий раз, когда создается новое соединение, проверьте, не существует ли оно уже с тем же источником и целью, и если да, то отсоедините новое.

person coding_idiot    schedule 11.06.2014
comment
Спасибо. Очень удобно. Я сделал небольшую настройку, чтобы он также проверял, является ли текущий источник целью текущей цели (так что в основном вы не сможете выполнить обратное соединение), то есть: var arr2 = jsPlumb.select({ source: con.targetId, target: con.sourceId }); тогда мне нужно только сделать if (arr.length + arr2.length > 1) - person Serge P; 12.06.2014
comment
это неправильный ответ, потому что detach(con) не будет правильно удалять все конечные точки при определенных обстоятельствах: jsplumb.org/doc/removing.html. Лучший способ сделать это — проверить перед подключением. См. это: stackoverflow .com/questions/22959893/ - person user590849; 14.01.2015
comment
@ user590849 ОП никогда не хотел удалять конечные точки, ваш сценарий может быть другим. - person coding_idiot; 14.01.2015
comment
Я получаю сообщение об ошибке, подобное этому: jsPlumb: ошибка пожара для подключения к событию: TypeError: jsPlumb.detach не является функцией. что делать? - person Darshan theerth; 09.12.2017