我正在尝试使用
获取快照的密钥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;
我有一个名为'resolution'的'root'引用的子代。对于每个分辨率,将创建“分辨率”引用的新子级。每个分辨率都有一个名称和一个ID。我将每个分辨率的ID存储为密钥,并将其名称作为值存储。这很方便,因为我可以通过简单地减去其中一个键来确定'resList'中分辨率的索引。
以上代码适用于添加和更改子项,但出于某种原因,当我删除子项时没有任何反应。
提前感谢您的帮助!
答案 0 :(得分:6)
正如@FrankVanPuffelen建议的那样,似乎'关键'不再是一个函数,而是一个变量。所以
var key = dataSnapshot.key;
确实有效,但
var key = dataSnapshot.key();
不