【问题标题】:can't get the key of a datasnapshot无法获取数据快照的密钥
【发布时间】:2016-12-28 05:36:09
【问题描述】:

我正在尝试使用

获取快照的密钥
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;

我有一个名为“resolutions”的“root”引用的子节点。对于每个解决方案,都会创建一个“解决方案”引用的新子代。每个决议都有一个名称和一个 ID。我将每个分辨率的 ID 存储为键,并将其名称存储为值。这很方便,因为这样我可以通过简单地减去其中一个键来确定“resList”中分辨率的索引。

上面的代码可以很好地添加和更改孩子,但由于某种原因,当我删除孩子时没有任何反应。

提前感谢您的帮助!

【问题讨论】:

  • 您使用的是哪个版本的 Firebase JavaScript SDK?在 2.x 中,snapshot.key() 是一个函数。在 3.x 中,它更改为只读属性,因此等价物将变为 snapshot.key
  • @FrankVanPuffelen 它有效!谢谢! (顺便说一下,我使用的是firebase 3.3.0)

标签: javascript web firebase firebase-realtime-database


【解决方案1】:

正如@FrankVanPuffelen 所建议的,“key”似乎不再是一个函数,而是一个变量。所以

var key = dataSnapshot.key;

确实有效,但是

var key = dataSnapshot.key();

没有。

【讨论】:

  • 感谢这是一个很好的解决方案 :)
猜你喜欢
  • 2017-09-22
  • 1970-01-01
  • 2023-04-10
  • 2020-09-10
  • 1970-01-01
  • 2019-01-19
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多