javascript - Firebase 推送不添加而是替换

标签 javascript firebase

当我使用 .push()opmerking 添加到名为“leerling”的子节点时,实际上添加新节点没有问题,但无意中添加了现有的 opmerking 节点在过程中被替换。

我之前有过类似的问题,见帖子Firebase push doesn't add but replace (JavaScript)然后解决了,但该解决方案不适用于此处。

Here是完整源代码的 fiddle 。请将 firebase 数据库名称更改为您自己的名称(或者是否有可用的测试/演示数据库?)以便对其进行测试。

$(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 没有其他 child 将被改变。但是,您要替换 /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> 的指定子节点.

关于javascript - Firebase 推送不添加而是替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29570924/

相关文章:

swift - 如何使用 JSQMessagesViewController 发送图像?

ios - IOS Firebase Cloud Functions 中未收到推送通知

javascript - 如何在Gjs代码中设置包含路径?

javascript - img 在手机屏幕上显示一半,但在电脑屏幕上正常,css jQuery?

javascript - 为什么[我的] CSS3/jQuery 过渡如此不完美?如何使它们更加平滑?

javascript - 防止在网站中使用触摸屏进行缩放(IE 11、Win 10)

Typescript Firebase 定义文件,Promises

typescript - 如何使用 angularfire2 检查 Firebase 中的值?

javascript - createUserWithEmailAndPassword后如何设置用户数据(web)

javascript - 在javascript中,有没有办法区分字母和其他字符?