2017-07-04 1 views
-2

firebaseデータベースにjsonデータが含まれていて、cardViewsに追加しました。クリックしたときにcardViewのキーを取得したいのですが、データベース内のすべてのオブジェクトの配列を返します。 これはインデックスです.js :どのようにすべての単一のオブジェクトのキーを取得するには?

var rootRef = firebase.database().ref().child("Stories"); 
rootRef.on("child_added", snap => { 
    var title = snap.child("Story Title").val(); 
    var content = snap.child("Story Content").val(); 
    $("#stories").append("<div id=\"cold\" class=\"col s8 m6\"><div 
    class=\"card\"><div class=\"card-image\"><img 
    src=\"https://www.joshmorony.com/wp-content/uploads/2016/11/firebase.png\"> 
    <a class=\"btn-floating halfway-fab waves-effect waves-light red\"><i 
    class=\"material-icons\">info</i></a></div><div class=\"card-content\"><p 
    onclick=\"viewKey()\">" + title + "</p></div></div></div>"); 
    }); 

    function viewKey() { 
    firebase.database().ref('/Stories/').once('value').then(function(snapshot) { 
     var storiesArray = snapshot.val(); 
     var keys = Object.keys(storiesArray); 
     for (var i = 0; i < keys.length; i++) { 
     var currentStory = storiesArray[keys[i]]; 
     console.log(currentStory); 
     } 

    }); 
    } 

オブジェクト配列: [ "-Ko8JpEjsdN2KGBdIG3f"、 "-Ko8JtdcEBICVZqIXLdO"、 "-Ko8TvZuu0Wh_XDGa1YW"、 " - KoBR0NmVmerjomE63-V"、 "-KoBSOybd5ymvOwz0Ip6"]

+0

トライにconsole.logループ –

+0

のためにある(キー[i]が)も、まだすべてのオブジェクトキーの配列 –

+0

を返し、あなたのstoriesArrayオブジェクト –

答えて

1

私はこのかもしれないと思います答え:スナップショットにはキーがあります。

child_addedを使用しているので、各子は一度に1つずつ読み込まれるため、各子snap.keyはその子スナップショットのキーを提供します。つまり、child_added行の後のクロージャ内のコードは、Storiesノード内の各子ノードごとに1回実行されます。

値を代わりに使用する場合は、「大きな」スナップショット(複数の子を持つ1つの親)でStoriesノードのすべてのデータを読み込みます。だから、その場合には

Stories 
    story_0 
    story_info: "ads" 
    story_1 
    story_info: "assad" 

ようになり、あなたはストーリーがそれぞれの子(story_0、story_1など)を取得するためにスナップショット反復処理する必要があります。それぞれの子供はそれ自身のスナップショットであり、それはそれ自身のsnapshot.keyです。

var storiesRef = firebase.database().ref().child("Stories"); 
storiesRef.on('child_added', function(snap) { 
    console.log(snap.key); 
}); 

あなたが値を使用して、一度に物語のすべてを取得したい場合は、これは読まれます:

Work with Lists of Data on the Web

このコードは、出力各物語のための鍵child_addedを使用します参照してください。 Storiesノードと子ノードを繰り返し、各キーを出力する

storiesRef.once('value', function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
    console.log(childSnapshot.key); 
    }); 
}); 

上記のchild_added関数は各子を取得し、引き続きchild_addedイベントを待ち受けますが、上記のvalue関数は一度実行され、将来のイベントは待ち受けません。

関連する問題