15

他のクライアントがボタンをクリックしたことをクライアントに通知する簡単なアプリを作成しています。以下を使用して、クリックを Firebase ( db)に保存しています。

db.push({msg:data});

すべてのクライアントは、他のユーザーのクリックを次のonようなで通知されます。

db.on('child_added',function(snapshot) { 
  var msg = snapshot.val().msg; 
});

ただし、ページが最初に読み込まれるときに、スタック上の既存のデータを破棄したいと考えています。私の戦略は、db.once()を定義する前にを呼び出しdb.on('child_added',...)て、最初の子の数を取得し、それを使用してその数の への呼び出しを破棄することdb.on('child_added',...)です。

残念ながら、初期カウントを取得するにdb.on('child_added',...) へのすべての呼び出しが発生しているため、失敗します。

初期データを効果的かつ簡単に破棄するにはどうすればよいですか?

4

2 に答える 2

17

あなたの質問を正しく理解できれば、ユーザーがページにアクセスしてから追加されたデータのみが必要なようです。Firebase では、データは常に変化しており、「古い」データと「新しい」データの概念がないため、説明する動作は設計によるものです。

ただし、ページが読み込まれた後に追加されたデータのみを表示する場合は、子の完全なセットが少なくとも 1 回読み込まれるまで、すべてのイベントを無視してみてください。例えば:

var ignoreItems = true;
var ref = new Firebase('https://<your-Firebase>.firebaseio.com');
ref.on('child_added', function(snapshot) {
  if (!ignoreItems) {
    var msg = snapshot.val().msg;
    // do something here
  }
});
ref.once('value', function(snapshot) {
  ignoreItems = false;
});

このアプローチに代わる方法は、優先度Firebase.ServerValue.TIMESTAMP(現在のサーバー時間) を指定して新しいアイテムを書き込み.startAt(...)、現在のタイムスタンプを使用してクエリを使用することです。ただし、これは上記のアプローチよりも複雑です。

于 2013-11-09T23:15:11.010 に答える