2015-04-10 2 views
1

Когда я добавляю opmerking к дочернему узлу с именем «leerling», используя .push(), новый узел фактически добавляется без проблем, но непреднамеренно заменяется существующий узел opmerking.Firebase push не добавляет, а заменяет

У меня есть аналогичная проблема до этого, см. Сообщение Firebase push doesn't add but replace (JavaScript), которое затем было разрешено, но это решение здесь не применяется.

Here является скрипкой полного исходного кода. Пожалуйста, просто измените имя базы данных 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 
        } 

       }); 

     } 
    }); 
}); 

ответ

3

Проблема не с 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>.

+0

Хорошая добыча Seamus! Вы избили меня на 6 минут. :-) –

+0

@FrankvanPuffelen Спасибо. Иногда мне повезло. :) – Seamus

+0

@Seamus вот оно, спасибо! – user1837293

Смежные вопросы