2017-09-05 7 views
0

は、私は自動的にたびにその値が変更JavaScriptで(例えばPOST1のための)任意のポストのために再度likedCountフェッチしたいfirebasefirebaseに保存されたオブジェクトから最新のfavoriteCount整数値を取得する方法は?

posts: { 
    post1-uid: { 
    likedCount: 10 
    ... other properties ... 
    } 
    post2-uid: { 
    likedCount: 2 
    ... other properties ... 
    } 
} 

におけるこのようなデータ構造を有しています。

私は

var likedCount; 
post1Ref.on("child_change", snapshot => { 
    likedCount = snapshopt.val(); 
}); 

を使用しようとする。しかしpost1other propertiesが更新されると、リスナーにもトリガされます。 if elseの状態を追加する必要がありますか?私は間違った道を歩いているようです。 ゴールを達成するためのエレガントな方法は何ですか?

答えて

2

非常に小さなデータにリスナーを追加する場合は、データを別の方法で構造化して、リファレンスをlikedCountの新しい親に向けます。あなたはリスナーの変更を付ける場所の直接の子ノード(または追加、または削除された)とき

posts: { 
    post1-uid: { 
    metrics: { 
     likedCount: 10 
    }, 
    ... other properties ... 
    } 
} 
+0

この回答は簡潔かつ重要なポイントです。最低限の変更は必要ですが、目標を達成する必要があります。ありがとう! –

1

child_のイベントがトリガされます。特定のプロパティに対してはトリガーできません。

あなただけのときlikedCount変更トリガしたい場合は、あなたが言っていたカウントの別のリストを持っているあなたのデータをモデル化することができます:

likedCounts 
    post1-uid1: 10 
    post1-uid2: 2 

今あなたがlikedCountsにリスナーを添付することができますし、ちょうどへの変更に通知しますその値:

ref.child("likedCounts").on("child_change", snapshot => { 
    let postKey = snapshot.key; 
    let likedCount = snapshot.val(); 
}); 
+0

しかし、まだ 'snapshot.val()'がどのポストから来ているのか分かりません。ユーザーが 'post1'ページを開くと、' posts1'のfavoriteCountだけが必要になります。 –

+0

イベントをトリガした投稿のキーは 'snapshot.key'で利用できます。あなたが投稿の残りの部分にアクセスする必要があるなら、あなたはそれを使って '/ posts'の下でそれを見ることができます。 –

+0

はそれを得ました。ありがとう! –

関連する問題