Firebase 推送不添加而是替换 (JavaScript)
Firebase push doesn't add but replace (JavaScript)
我正在使用以下代码向某人 ('leerling') 添加备注 ('opm')。
function onFormSubmitted()
{
event.preventDefault();
var ref = new Firebase("https://mydatabase.firebaseio.com/");
var _leerling = document.getElementById("Leerling").value;
var _opmerking = document.getElementById("Opmerking").value;
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
leerling: _leerling,
opmerking: _opmerking
});
var postID = newPostRef.key();
var leerlingRef = ref.child("leerling").child(_leerling);
leerlingRef.once('value', function(snapshot) {
if( snapshot.val() === null ) {
/* does not exist */
var leerlingNummer = _leerling.substring(0,6).trim();
ref.child("leerling").child(leerlingNummer).set({
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38)
})
ref.child("leerling").child(leerlingNummer).child("opmerkingen").push({
"opmID": postID
})
} else {
var leerlingPostRef = snapshot.ref().child("opmerkingen)");
leerlingPostRef.push({"opmID": postID});
}
});
}
在代码的开头 postsRef.push 按预期添加对 opmerkingen child (在根目录中)的注释。
在代码的末尾,据我所知(leerlingPostRef.push),我对 leerling 的 opmerkingen child 做了同样的事情,但是整个 opmerkingen child得到替换,删除现有的 opm: postID 而不是添加一个。
有什么问题,如何解决?
我建议使用 Firebase.update()
,因为它会创建或更新一个值。使用 Firebase.push()
删除任何,并且某个子树中的所有数据都将被删除并替换为您发送的内容。
因此,只需将 Firebase.push()
的任何引用替换为 Firebase.update()
,您的代码就会按预期工作。
Link 参考:Firebase.update()
注意:这将替换您正在更新的数据的任何引用。因此,如果您在 Firebase 中有值 "opmID": 1
,将 "opmID"
更新为 2
将替换原来的 "opmID": 1
。由于 Firebase 就像一本字典,键只能存在一次。
当我从常规输入 type='text' 字段传递 leerling 时,它工作正常,但是当我从 select-option 输入字段传递它时,它如前所述失败了。
解决方案:
var leerlingRef = ref.child("leerling").child(_leerling.substring(0,6).trim());
而不是
var leerlingRef = ref.child("leerling").child(_leerling);
第 15 行
我正在使用以下代码向某人 ('leerling') 添加备注 ('opm')。
function onFormSubmitted()
{
event.preventDefault();
var ref = new Firebase("https://mydatabase.firebaseio.com/");
var _leerling = document.getElementById("Leerling").value;
var _opmerking = document.getElementById("Opmerking").value;
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
leerling: _leerling,
opmerking: _opmerking
});
var postID = newPostRef.key();
var leerlingRef = ref.child("leerling").child(_leerling);
leerlingRef.once('value', function(snapshot) {
if( snapshot.val() === null ) {
/* does not exist */
var leerlingNummer = _leerling.substring(0,6).trim();
ref.child("leerling").child(leerlingNummer).set({
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38)
})
ref.child("leerling").child(leerlingNummer).child("opmerkingen").push({
"opmID": postID
})
} else {
var leerlingPostRef = snapshot.ref().child("opmerkingen)");
leerlingPostRef.push({"opmID": postID});
}
});
}
在代码的开头 postsRef.push 按预期添加对 opmerkingen child (在根目录中)的注释。
在代码的末尾,据我所知(leerlingPostRef.push),我对 leerling 的 opmerkingen child 做了同样的事情,但是整个 opmerkingen child得到替换,删除现有的 opm: postID 而不是添加一个。
有什么问题,如何解决?
我建议使用 Firebase.update()
,因为它会创建或更新一个值。使用 Firebase.push()
删除任何,并且某个子树中的所有数据都将被删除并替换为您发送的内容。
因此,只需将 Firebase.push()
的任何引用替换为 Firebase.update()
,您的代码就会按预期工作。
Link 参考:Firebase.update()
注意:这将替换您正在更新的数据的任何引用。因此,如果您在 Firebase 中有值 "opmID": 1
,将 "opmID"
更新为 2
将替换原来的 "opmID": 1
。由于 Firebase 就像一本字典,键只能存在一次。
当我从常规输入 type='text' 字段传递 leerling 时,它工作正常,但是当我从 select-option 输入字段传递它时,它如前所述失败了。
解决方案:
var leerlingRef = ref.child("leerling").child(_leerling.substring(0,6).trim());
而不是
var leerlingRef = ref.child("leerling").child(_leerling);
第 15 行