Как удалить соединение jsPlumb

Я играю с jsplumb, но не могу удалить соединение между двумя div, имеющими только id одного div.

Ответ 1

  Обновление: jsPlumb больше не реализует метод detach. Смотрите ответ рафика Бари ниже для более актуального решения.

Если у вас несколько подключений к элементам или к элементам, отсоединение всех подключений может быть не лучшим решением для удаления подключения. Существует (недостаточно хорошо документированная) функция для отключения ровно одного соединения:

jsPlumb.detach(connection, {
    fireEvent: false, //fire a connection detached event?
    forceDetach: false //override any beforeDetach listeners
})

В моем примере я хочу удалить соединение при нажатии на соединитель:

 jsPlumb.bind('click', function (connection, e) {
     jsPlumb.detach(connection);
 });

Ответ 2

Чтобы удалить соединение, используйте следующий код:

jsPlumb.deleteConnection(con)

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

Ответ 3

Я нашел решение в документации (http://jsplumb.org/doc/usage.html)

jsPlumb.detachAllConnections("elementId");

Ответ 4

Если исходный div или целевой идентификатор div уже известен, вы можете удалить соединение следующим образом:

var conn = jsPlumb.getConnections({
              //only one of source and target is needed, better if both setted
              source: sourceId,
              target: targetId
            });
if (conn[0]) {
  jsPlumb.detach(conn[0]);
}

Вы также можете использовать jsPlumb.getAllConnections() для получения массива всех подключений и протестировать каждый источник connectionId или targetId для получения именно того соединения, которое вам нужно;

Ответ 5

После того, как все соединения с конечной точкой удаляются из элемента и из него, вам необходимо отделить его, как показано в третьей строке

jsPlumb.detachAllConnections(divID);
jsPlumb.removeAllEndpoints(divID);
jsPlumb.detach(divID); 
divID.remove()

Ответ 6

Этот код удаляет все "неправильные" соединения в игре, которую я разрабатываю. Я надеюсь, что это поможет

var wrong_connections = new Array(DB_ID, ANOTHER_DB_ID);
var connections = jsPlumb.getConnections();
$.each(connections, function(index, value) { // going through all connections
  var source_id = value.source.attr('id').substring(28);  // I need the ID from DB so I`m getting it from the source element
  for (var a = 0; a < wrong_connections.length; a++) {  
    if (source_id == wrong_connections[a]) {
      jsPlumb.detach(value);
    }
  }
});

Ответ 7

Привет, вы можете обратиться к этому: Отсоединить соединение jsPlumb

Этот блок кода позволяет отсоединить соединение, если было нажато соединение:

jsPlumb.bind("click", function(conn) {
    jsPlumb.detach(conn);
});

Ответ 8

jsPlumb.deleteConnectionsForElement(elementId)

работает. Хотя я и старую, я хотел бы добавить, что выяснение того, какие методы имеет библиотека, при условии, что она достаточно описательная, достаточно проста.

dev tools

Ответ 9

Я хочу обновить ответ. Для версии 2.5, если вы используете

jsPlumb.detach()

вы можете получить сообщение об ошибке, что: jsPlumb.detach() не является функцией. И я тоже пытаюсь

jsPlumb.deleteConnection(conn)

соединение действительно удалено, однако я не уверен, почему конечная точка просто отсоединяется от div. Наконец, это решается с помощью

instance.deleteConnection(conn)

Ответ 10

Во-первых, вы можете найти ваше соединение, используя sourceId и targetId

var connections = jsPlumb.getConnections({
            source: sourceId ,
            target:targetId  
        });

Это вернет массив соединений jsPlumb, поэтому вы можете удалить все соединения, связанные с этим источником и целевым идентификатором.

for(var i=0;i < connections.length;i++) {
            jsPlumb.deleteConnection(connections[i]);
        }

Ответ 11

Удалить соединение работало у меня

jsPlumb.bind("click", function(conn) {
    // alert(JSON.stringify(data));
    jsPlumb.deleteConnection(conn);
 });