0

次の2つのコードブロックとの違いは何ですか?上部は期待どおりに機能しますが、下部は機能しません。

// Initially outputs 0, but eventually outputs the # of players.
Meteor.autorun(function() {
  var players = Players.find();
  console.info(players.count());
});

// Outputs 0 twice. Why does this not work like the block above?
var players = Players.find();
Meteor.autorun(function() {
  console.info(players.count());
});

Meteor.isClientブロック内のリーダーボードの例でこれをテストしています。

ありがとう、アンドリュー

4

1 に答える 1

2

Meteorはリアクティブですが、リアクティブコンテキスト(別名)内でクエリを作成する必要がありますMeteor.autorun。リアクティブコンテキストはTemplate、、、およびMeteor.autorunです。Meteor.renderMeteor.renderList

2番目のケースvar players = Players.find();では、Meteorの起動中に実行され、起動中にその時点でクエリを実行したときに取得したデータが含まれます。

最初に、クエリをリアクティブコンテキストに配置しました。これは、ある種のデータ更新があるたびに呼び出されて再実行されます。2番目のケースでは、クエリを再実行する機会がなく、ブラウザがページをロードしたときに含まれているデータが残っています。

Meteorはリアクティブですが、リアクティブコンテキスト内でデータを再クエリする必要があります。

于 2013-02-19T07:53:09.563 に答える