我正在用Javascript构建简单的待办事项应用程序,并使用firebase的实时数据库作为数据库来存储每个用户的任务。检索和写入数据可以正常工作,但是当我想从列表中删除某些内容时,问题就出现了。具体来说,我想在单击按钮时删除最后一个项目。
这是我的数据库的样子:
这是检索数据的代码:
db.on('child_added', snapshot => {
let span = document.createElement('span');
span.setAttribute('class', 'listItem');
let textNode = document.createTextNode(snapshot.val().name + `\n`);
span.appendChild(textNode);
snapshot.forEach(() => {
if(snapshot.val().uid == user.uid) {
todoListContent.appendChild(span);
}
});
});
答案 0 :(得分:0)
要从数据库中删除节点,您需要知道该节点的完整路径。这意味着您必须存储每个节点的密钥,或者存储一些其他值以允许您查找该密钥。
对于您而言,将密钥与您创建的span
关联起来似乎最容易存储密钥:
db.on('child_added', snapshot => {
let span = document.createElement('span');
span.setAttribute('id', snapshot.key); // store the key for later reference
span.setAttribute('class', 'listItem');
let textNode = document.createTextNode(snapshot.val().name + `\n`);
span.appendChild(textNode);
snapshot.forEach(() => {
if(snapshot.val().uid == user.uid) {
todoListContent.appendChild(span);
}
});
});
现在,当用户单击span
删除该节点时,您可以从其id
属性中获取密钥,然后可以使用以下方法删除该节点:
let key = span.id;
db.child(key).remove();