2016-08-21 9 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」内の解像度のインデックスを、そのキーの1つを単に減算することによって決定できます。

上記のコードは子供の追加や変更には問題ありませんが、何らかの理由で子を削除しても何も起こりません。

事前にお問い合わせいただきありがとうございます。

+3

Firebase JavaScript SDKのどのバージョンを使用していますか? 2.xでは、 'snapshot.key()'は関数でした。 3.xでは、読み取り専用のプロパティに変更されたので、同等のものが 'snapshot.key'になりました。 –

+0

@FrankVanPuffelenそれは動作します!ありがとう! (私は途中でfirebase 3.3.0を使用しています) – zomnombom

答えて

6

@FrankVanPuffelenが示唆しているように、 'key'はもはや関数ではなく変数です。だから、

var key = dataSnapshot.key; 

は、作業を行いますが、

var key = dataSnapshot.key(); 

はしていません。

+0

おかげでそれは素晴らしい解決策です:) –

関連する問題