2016-04-15 10 views
6

私は、そのマーケットプレイスで販売されている各アイテムの変更をリッスンしているiOSマーケットプレースアプリを持っています。もっと正確に言えば、私はそのアイテムの子供が変わっても、取り除かれるのか聞いています。Firebaseの100人の子供に追加されたアイテムを聴く

問題は、子供が追加されたときに聞きたいことです。 Firebaseに子が追加されたときにリッスンするのは、最初にリスナを設定したときに、そのノード上のすべての兄弟を取得することです。

アイテムの子が同じアイテムのリストではないため、特定のタイムスタンプの後に追加された子を聞くことができません。私はsomething like thisをやろうと考えていて、最初の子を無視していました。私は本質的にFirebaseから物事を2回引っ張っているので、このような大きな浪費のように思えます。 1回はFEventTypeValueで、1回はFEventTypeChildAddedとします。

私が聴きたいアイテムは、フィードに読み込まれているアイテムです。おそらく数百のアイテムになるでしょうが、潜在的に何千ものアイテムになる可能性があります。

どうやってこれをやりますか?私は追加された子どもの話を聞くことについてすべてを忘れるべきでしょうか、それともまともな解決策がありますか?

編集(追加サンプルコード):

だから、これは私がFirebase上の特定の項目のデータをフェッチする方法です。

var ref = new Firebase('https://<your-Firebase>.firebaseio.com'); 
ref.child('listings/-KB9ZqLZBEskoUihb-yR').once('value', function(snapshot) { 
    listing = snapshot.val(); 
}); 

そして、ここで私は新しい子がその項目に追加されたときのために聞きたい:

ref.child('listings/-KB9ZqLZBEskoUihb-yR').on('child_added', function(snapshot) { 
    listing[snapshot.key()] = snapshot.val() 
}); 

問題は、そのノードに追加された項目を聴くことは、再びすべての子ノードを取得し、それが思われることです大きな浪費のように。このような状況にどう対処しますか?

+1

コードとデータを説明するテキストが多すぎます。あなたが求めている状況を再現する実際のコードとJSON(テキストとして、スクリーンショットなし)を提供してください。 [MCVE](http://stackoverflow.com/help/mcve)を参照してください。 –

+0

'listings/-KB9ZqLZBEskoUihb-yR'は特定の商品ですか?そのノード内に*子が追加されているか、または* listing *ノードで追加される他のアイテムを探していますか?いくつかのFirebase構造が本当に私たちを助け、多分質問の明確化を助けるでしょう。 – Jay

+0

'listing/-KB9ZqLZBEskoUihb-yR'は特定のアイテムで、子供がその特定のアイテムに追加されたときに聴きたい。 –

答えて

3

Firebaseは、新しく追加された子を特定のノードに取り込むためのサポートを備えています。

ここにはfirebase documentation for retrieving dataがあります。もう一度「子が追加されました」セクションを再度ご覧ください。私はちょうどそこからいくつかの重要なノートを引用しています。

child_addedが、それはまた、ある目的を注文するために、すべての新しい子が指定されたパス

に追加された時間と、この

を各既存の子のために一度トリガし、再び されます前の子の鍵である を含む2番目の引数を渡しました。

この例もあわせてご覧ください。

// If we wanted to retrieve only the data on each new post added to our blogging app, we could use child_added 

// Get a reference to our posts 
var ref = new Firebase("https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts"); 
// Retrieve new posts as they are added to our database 
ref.on("child_added", function(snapshot, prevChildKey) { 
    var newPost = snapshot.val(); 
    console.log("Author: " + newPost.author); 
    console.log("Title: " + newPost.title); 
    console.log("Previous Post ID: " + prevChildKey); 
}); 

だから、ここでは、あなたのデータベース構造 suggested hereであるビットを変更することにより、このトリックを行う可能性があります prevChildKey

をよく見を持っています。しかし、私はあなたがすでにその注文構造を持っていると思います。それが役に立てば幸い。

関連する問題