2015-03-31 70 views
1

我有以下代码添加备注('opm')给一个人('leerling')。Firebase推送不添加,但替换(JavaScript)

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子元素(在根中)添加备注。

在代码的末尾,我做了和leerling的opmerkingen孩子一样的(leerlingPostRef.push),但是在那里整个opmerkingen孩子得到了REPLACED,删除了现有的opm:postID而不是加一个。

什么是错,如何解决?

+0

所以你只是想更新opmID为Leerling值

var leerlingRef = ref.child("leerling").child(_leerling); 

? – 2015-03-31 20:28:27

+0

我想。 leerling的内容应该保持不变,只有一个备注应该是ADDED – user1837293 2015-03-31 20:30:25

+0

我建议使用Firebase.update()。查看我的答案,稍微详细一点。 – 2015-03-31 20:38:59

回答

1

当我从常规输入类型='文本'字段中传递leerling时,它工作正常,但是当我从选择选项输入字段中传递它时,它失败,如上所述。

溶液:

var leerlingRef = ref.child("leerling").child(_leerling.substring(0,6).trim()); 

,而不是第15行

0

我建议使用Firebase.update(),因为它会创建或更新一个值。使用Firebase.push()删除任何,并且某个子树中的所有数据都将被删除,并替换为您发送的内容。

因此,只需将Firebase.push()的任何引用替换为Firebase.update(),并且您的代码应该按预期工作。

链接参考:Firebase.update()

注:这将取代你正在更新的数据的任何引用。因此,如果您的Firebase中的值为"opmID": 1,则将"opmID"更新为2将取代原来的"opmID": 1。由于Firebase就像字典,键只能存在一次。

+0

我现在更新了代码末尾的两个推送实例。但它没有什么区别,整个opmerkingen孩子仍然只包含新的opmerking取代? – user1837293 2015-03-31 20:38:58

+0

看看你定义'newPostRef'的第10行。你正在用新信息更新'opmerkingen'。所以每次你调用这个函数'opmerkingen'都会被这些变量中的新信息所取代。 – 2015-03-31 20:41:55

+0

@TaylorGlaeser也许我误解了你,但这听起来像是在用'Firebase.set()'混合'Firebase.push()'。 'Firebase.set()'方法将覆盖某个位置的数据,而'Firebase.push()'使用唯一键生成新的子位置。 – Seamus 2015-03-31 20:54:26