2016-08-21 67 views
4

的關鍵,我試圖讓快照與不能得到datasnapshot

dataSnapshot.key() 

方法的關鍵,但它似乎並不奏效。下面是相關的代碼:

的index.html:

... 

<select id="resList" size="20"></select> 

... 

index.js:

function addChild(name, id) { 
    var list = document.getElementById("resList"); 
    var item = document.createElement("option"); 
    item.text = "Resolution " + id + ": " + name; 
    list.add(item); 
} 

function changeChild(name, index) { 
    var list = document.getElementById("resList"); 
    var item = document.createElement("option"); 
    item.text = "Resolution " + (index+1) + ": " + name; 

    list.remove(index); 
    list.add(item, index); 
} 

function removeChild(index) { 
    var list = document.getElementById("resList"); 
    list.remove(index); 
} 

function init() { 
    const resolutionRef = firebase.database().ref().child('resolutions'); 

    resolutionRef.on('child_added', function(childSnapshot, prevChildKey) { 
     if (prevChildKey == null) 
      prevChildKey = "0"; 

     addChild(childSnapshot.val(), parseInt(prevChildKey) + 1); 
    }); 

    resolutionRef.on('child_changed', function(childSnapshot, prevChildKey) { 
     if (prevChildKey == null) 
      prevChildKey = "0"; 

     changeChild(childSnapshot.val(), parseInt(prevChildKey)); 
    }); 

    resolutionRef.on('child_removed', function(oldChildSnapshot) { 
     removeChild(parseInt(oldChildSnapshot.key())); 
    }); 
} 

window.onload = init; 

我有所謂的 '決議' 的 '根' 引用的一個孩子。對於每個決議,創建一個新的「決議」參考的孩子。每個解決方案都有一個名稱和一個ID。我將每個分辨率的ID存儲爲密鑰,並將其名稱作爲值。這很方便,因爲這樣我就可以通過簡單地減去其中一個鍵來確定'resList'中分辨率的索引。

上述代碼適用於添加和更改子項,但由於某些原因,當我刪除子項時,什麼都不會發生。

感謝您提前提供任何幫助!

+3

您使用的是哪種版本的Firebase JavaScript SDK?在2.x'snapshot.key()中是一個函數。在3.x中它變成了只讀屬性,所以相當於變成'snapshot.key'。 –

+0

@FrankVanPuffelen它的工作原理!謝謝! (順便說一下,我使用的是Firebase 3.3.0) – zomnombom

回答

6

正如@FrankVanPuffelen所建議的那樣,'關鍵'不再是一個函數,而是一個變量。所以

var key = dataSnapshot.key; 

的工作,但

var key = dataSnapshot.key(); 

沒有。

+0

感謝這是很好的解決方案:) –