Напомним ... когда мы создаем соединение, мы часто используем следующее:
connections.push(
r.connection(r.getById(firstObjectId), r.getById(secondObjectId), '#fff')
);
То, что мы здесь делаем, - это добавление (добавление) объекта Raphael.connections
в connections[]
массив, основанный на их Raphael
идентификаторах объектов
Чтобы добавить метод / функцию к Raphael
, можно использовать:
Raphael.fn.fnName = function (){ /* Your code here */ }
Это создает функцию в нашем пространстве имен Raphael
для использования с нашими Raphael
объектами.
Ниже приведен код, который я создал и который делает именно то, что вам нужно.Я не смог найти хороший ресурс для Raphael
, но скоро обязательно его создам, так как я много занимался с ним разработкой.
Raphael.fn.removeConnection = function (firstObjectId, secondObjectId) {
for (var i = 0; i < connections.length; i++) {
if (connections[i].from.id == firstObjectId) {
if (connections[i].to.id == secondObjectId) {
connections[i].line.remove();
connections.splice(i, 1);
}
}
else if (connections[i].from.id == secondObjectId) {
if (connections[i].to.id == firstObjectId) {
connections[i].line.remove();
connections.splice(i, 1);
}
}
}
};
Так же, как в соединениях create,предоставляются два идентификатора.Мы должны найти эти идентификаторы в массиве соединений, которые мы установили для каждого соединения.Если у вас есть только одно соединение, нет необходимости в обходе массива, хотя этот случай встречается реже.
У нас есть два возможных сценария - исключая случай отсутствия соединения для простоты.Он также находит, что:
- объекты соединения
from.id
соответствуют первому предоставленному параметру firstObjectId
.Затем to
соответствует второму предоставленному параметру secondObjectId
. - , а объекты соединения
from.id
соответствуют первому предоставленному параметру secondObjectId
.Затем to
соответствует второму предоставленному параметру firstObjectId
.
Этот метод проверки охватывает все наши базы, поэтому независимо от того, как взаимодействует соединение (в моем случае пользователь нажимаетдва объекта, чтобы соединить их и удалить их соединение)
После того, как мы подтвердили, что у нас есть два правильных объекта, мы затем удаляем линию из DOM, используя connections[i].line.remove();
как простое удаление объекта соединения изМассив оставит его на карте.
Наконец, мы удаляем указанный объект соединения из массива, а метод сращивания оставляет нам несвященный массив (в нашем массиве нет дыр, то есть;))используя connections.splice(i, 1);
Тогда