在Firebase中添加新子项

时间:2018-03-26 18:47:46

标签: javascript firebase firebase-realtime-database

所以我的情况与网上发现的问题有点不同。

我希望在按下按钮时使用新的子节点Societies更新节点Foot19。上下文是它是一个学校组列表,当用户按下按钮以跟随'他们,该组的ID被添加到他们的个人数据部分。

因此,当他们点击addFootballSoc按钮Foot19作为新的子节点添加到其特定的Societies节点时。

每个sUsers节点开头的关键值等同于authentication uid,这就是我使用firebase.auth()

调用它的原因

Screenshot of the area in my database I want to update with a new child

document.getElementById('addFootballSoc').onclick = function() {addFootball()};

function addFootball(){
var runUid = firebase.auth().currentUser.uid;
var searchRef = firebase.database().ref('sUsers');
var newSearchRef = searchRef.child(runUid); 
var mm = newSearchRef.child('Societies')
mm.child.set('Foot19'){}
}

我希望它为他们加入的每个群组添加一个新的孩子,这样他们就无法覆盖,例如,如果我要添加一个' Arts'组按钮

编辑:

更改了函数,因此onclick正常工作,它现在写入我想要的位置, 但是,如果我要在Foot19旁边添加另一个子节点,它将删除Foot19并替换它,我会使用push但我不想添加唯一键到我的节点。如何更改此项以确保可以添加更多节点?

document.getElementById('addFootballSoc').onclick = function() {addFootball()};

function addFootball(){
var runUid = firebase.auth().currentUser.uid;
var searchRef = firebase.database().ref('sUsers');
var newSearchRef = searchRef.child(runUid); 
var mm = newSearchRef.child('Societies')
mm.child.set('Foot19'){}
}

2 个答案:

答案 0 :(得分:0)

您可能会在页面加载时立即调用此函数addFootball(),然后再从Firebase中恢复/解析,或者看起来正在处理.set错误类型的数据。试试这个。

document.getElementById('addFootballSoc').addEventListener("click", function(evt) {
var runUid = firebase.auth().currentUser.uid;
if(runUid){
var searchRef = firebase.database().ref('sUsers');
var newSearchRef = searchRef.child(runUid); 
var mm = newSearchRef.child('Societies')
mm.child.set({'Foot19':true});
} else {
  console.log("no uid");
}

});

答案 1 :(得分:0)

解决了它。

screengrab

屏幕抓取显示放置在用户societies节点内的子节点ùid中的条目。额外的ALT5& ASN11是我在第6行更改值以测试新节点不会被覆盖的地方。

function addFootball(){
var runUid = firebase.auth().currentUser.uid;
var searchRef = firebase.database().ref('sUsers');
var newSearchRef = searchRef.child(runUid); 
newSearchRef.child('Societies').update({
    Foot19 : true
})
}