无法获取数据快照的密钥

zom*_*bom 4 javascript web firebase firebase-realtime-database

我试图获取快照的关键

dataSnapshot.key()
Run Code Online (Sandbox Code Playgroud)

方法,但它似乎没有工作.这是相关的代码:

index.html的:

...

<select id="resList" size="20"></select>

...
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

我有一个名为'resolution'的'root'引用的孩子.对于每个分辨率,将创建"分辨率"引用的新子级.每个分辨率都有一个名称和一个ID.我将每个分辨率的ID存储为密钥,并将其名称作为值存储.这很方便,因为这样我可以通过简单地减去其中一个键来确定'resList'中分辨率的索引.

上面的代码适用于添加和更改子项,但出于某种原因,当我删除一个孩子时没有任何反应.

在此先感谢您的帮助!

zom*_*bom 7

正如@FrankVanPuffelen建议的那样,似乎"关键"不再是一个函数,而是一个变量.所以

var key = dataSnapshot.key;
Run Code Online (Sandbox Code Playgroud)

确实有用,但是

var key = dataSnapshot.key();
Run Code Online (Sandbox Code Playgroud)

没有.