回顧一下......當我們創建一個連接,我們經常使用以下命令:
connections.push(
r.connection(r.getById(firstObjectId), r.getById(secondObjectId), '#fff')
);
我們在這裏所做的是推(添加)一個Raphael.connections
對象到connections[]
陣列,基於其Raphael
對象ID的
將方法/函數添加到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);
}
}
}
};
就像創建連接一樣,提供了兩個id。我們必須在我們推送每個連接所設置的連接數組中找到這些ID。如果只有一個連接,則不需要數組遍歷,儘管遇到這種情況較少。
這裏有兩種可能的情況 - 不包括爲簡單起見沒有找到連接的情況。它要麼發現:
- 連接對象
from.id
對應於第一個提供的參數firstObjectId
。然後,to
對應於第二個提供的參數secondObjectId
。
- 連接對象
from.id
對應於第一個提供的參數secondObjectId
。然後,to
對應於第二個提供的參數firstObjectId
。
檢查的這個方法適用於我們所有的基地,所以不管如何建立連接的互動與(在我的情況下,用戶點擊兩個對象將它們連接,並刪除它們的連接)
一旦我們確認我們有兩個正確的對象,然後我們從DOM中刪除該行,使用connections[i].line.remove();
作爲剛剛從陣列中移除連接對象將它留在地圖上。
最後,我們從數組中刪除指定的連接對象,並且所述拼接方法留給我們的未聖陣列(我們的陣列中沒有孔,即;)),使用connections.splice(i, 1);
然後,