Firebase 推送不添加而是替换
Firebase push doesn't add but replace
当我使用 .push()
将 opmerking
添加到名为 'leerling' 的子节点时,实际上添加新节点没有问题,但无意中添加了现有的 opmerking
节点过程中被替换。
我之前也遇到过类似的问题,参见post ,后来解决了,但是这个解决方案不适用于这里。
Here是一个fiddle的完整源代码。请将 firebase 数据库名称更改为您自己的名称(或者是否有可用的 test/demo 数据库?)以便对其进行测试。
$(document).ready(function(){
$("#submit").click(function(){
var _leerling = $("#Leerling").val();
var _opmerking = $("#Opmerking").val();
var _bestanden = $("#Bestanden").val();
var _door = $("#Door").val();
var success = true;
if(
_leerling == "Maak een keuze..." || _leerling == "" || _leerling == "5H:" || _leerling == "6V:" ||
_opmerking == "Typ hier jouw opmerking over de leerling die je geselecteerd hebt." || _opmerking == "" ||
_door == "Maak een keuze..." || _door == ""
) {
alert("Alle velden met * zijn verplicht");
}
else {
event.preventDefault();
var ref = new Firebase("https://torrid-inferno-6428.firebaseio.com/");
var leerlingNummer = _leerling.substring(0,6).trim();
var updatedObj = {}; // truc om key een waarde te geven, kan niet rechtstreeks met JavaScript
updatedObj[leerlingNummer] = {
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38),
"klaskort": _leerling.substring(35,37),
"leerlingdropdown": _leerling};
ref.child("leerling").update(updatedObj,
function(data) {
if (data) { alert(data); success = false; }
});
ref.child("leerling").child(leerlingNummer).child("opmerkingen").push({
"opmerking": _opmerking,
"bestanden": _bestanden,
"door": _door},
function(data) {
if (data) { alert(data); success = false; }
if (success) {
alert("Bedankt! Jouw opmerking is opgeslagen.");
$('#form')[0].reset(); //To reset form fields
}
});
}
});
});
问题不在于 Firebase.push()
,而在于此:
var updatedObj = {}; // truc om key een waarde te geven, kan niet rechtstreeks met JavaScript
updatedObj[leerlingNummer] = {
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38),
"klaskort": _leerling.substring(35,37),
"leerlingdropdown": _leerling};
ref.child("leerling").update(updatedObj,
function(data) {
if (data) { alert(data); success = false; }
});
您正在更新 /leerling/<leerlingNummer>
,这意味着不会更改 /leerling
的其他子项。但是,您正在替换 /leerling/<leerlingNummer>
下的所有内容,这就是删除您的 opmerkingen
.
试试这个:
var updatedObj = {
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38),
"klaskort": _leerling.substring(35,37),
"leerlingdropdown": _leerling};
ref.child("leerling").child(leerlingNummer).update(updatedObj, function(data) {
if (data) { alert(data); success = false; }
});
这将更新 /leerling/<leerlingNummer>
的指定子节点。
当我使用 .push()
将 opmerking
添加到名为 'leerling' 的子节点时,实际上添加新节点没有问题,但无意中添加了现有的 opmerking
节点过程中被替换。
我之前也遇到过类似的问题,参见post
Here是一个fiddle的完整源代码。请将 firebase 数据库名称更改为您自己的名称(或者是否有可用的 test/demo 数据库?)以便对其进行测试。
$(document).ready(function(){
$("#submit").click(function(){
var _leerling = $("#Leerling").val();
var _opmerking = $("#Opmerking").val();
var _bestanden = $("#Bestanden").val();
var _door = $("#Door").val();
var success = true;
if(
_leerling == "Maak een keuze..." || _leerling == "" || _leerling == "5H:" || _leerling == "6V:" ||
_opmerking == "Typ hier jouw opmerking over de leerling die je geselecteerd hebt." || _opmerking == "" ||
_door == "Maak een keuze..." || _door == ""
) {
alert("Alle velden met * zijn verplicht");
}
else {
event.preventDefault();
var ref = new Firebase("https://torrid-inferno-6428.firebaseio.com/");
var leerlingNummer = _leerling.substring(0,6).trim();
var updatedObj = {}; // truc om key een waarde te geven, kan niet rechtstreeks met JavaScript
updatedObj[leerlingNummer] = {
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38),
"klaskort": _leerling.substring(35,37),
"leerlingdropdown": _leerling};
ref.child("leerling").update(updatedObj,
function(data) {
if (data) { alert(data); success = false; }
});
ref.child("leerling").child(leerlingNummer).child("opmerkingen").push({
"opmerking": _opmerking,
"bestanden": _bestanden,
"door": _door},
function(data) {
if (data) { alert(data); success = false; }
if (success) {
alert("Bedankt! Jouw opmerking is opgeslagen.");
$('#form')[0].reset(); //To reset form fields
}
});
}
});
});
问题不在于 Firebase.push()
,而在于此:
var updatedObj = {}; // truc om key een waarde te geven, kan niet rechtstreeks met JavaScript
updatedObj[leerlingNummer] = {
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38),
"klaskort": _leerling.substring(35,37),
"leerlingdropdown": _leerling};
ref.child("leerling").update(updatedObj,
function(data) {
if (data) { alert(data); success = false; }
});
您正在更新 /leerling/<leerlingNummer>
,这意味着不会更改 /leerling
的其他子项。但是,您正在替换 /leerling/<leerlingNummer>
下的所有内容,这就是删除您的 opmerkingen
.
试试这个:
var updatedObj = {
"naam": _leerling.substring(7,33).trim(),
"klas": _leerling.substring(34,38),
"klaskort": _leerling.substring(35,37),
"leerlingdropdown": _leerling};
ref.child("leerling").child(leerlingNummer).update(updatedObj, function(data) {
if (data) { alert(data); success = false; }
});
这将更新 /leerling/<leerlingNummer>
的指定子节点。