的關鍵,我試圖讓快照與不能得到datasnapshot
dataSnapshot.key()
方法的關鍵,但它似乎並不奏效。下面是相關的代碼:
的index.html:
...
<select id="resList" size="20"></select>
...
index.js:
function addChild(name, id) {
var list = document.getElementById("resList");
var item = document.createElement("option");
item.text = "Resolution " + id + ": " + name;
list.add(item);
}
function changeChild(name, index) {
var list = document.getElementById("resList");
var item = document.createElement("option");
item.text = "Resolution " + (index+1) + ": " + name;
list.remove(index);
list.add(item, index);
}
function removeChild(index) {
var list = document.getElementById("resList");
list.remove(index);
}
function init() {
const resolutionRef = firebase.database().ref().child('resolutions');
resolutionRef.on('child_added', function(childSnapshot, prevChildKey) {
if (prevChildKey == null)
prevChildKey = "0";
addChild(childSnapshot.val(), parseInt(prevChildKey) + 1);
});
resolutionRef.on('child_changed', function(childSnapshot, prevChildKey) {
if (prevChildKey == null)
prevChildKey = "0";
changeChild(childSnapshot.val(), parseInt(prevChildKey));
});
resolutionRef.on('child_removed', function(oldChildSnapshot) {
removeChild(parseInt(oldChildSnapshot.key()));
});
}
window.onload = init;
我有所謂的 '決議' 的 '根' 引用的一個孩子。對於每個決議,創建一個新的「決議」參考的孩子。每個解決方案都有一個名稱和一個ID。我將每個分辨率的ID存儲爲密鑰,並將其名稱作爲值。這很方便,因爲這樣我就可以通過簡單地減去其中一個鍵來確定'resList'中分辨率的索引。
上述代碼適用於添加和更改子項,但由於某些原因,當我刪除子項時,什麼都不會發生。
感謝您提前提供任何幫助!
您使用的是哪種版本的Firebase JavaScript SDK?在2.x'snapshot.key()中是一個函數。在3.x中它變成了只讀屬性,所以相當於變成'snapshot.key'。 –
@FrankVanPuffelen它的工作原理!謝謝! (順便說一下,我使用的是Firebase 3.3.0) – zomnombom