0

下面两段代码有什么区别?顶部按预期工作,但底部没有。

// 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. 反应式上下文是:TemplateMeteor.autorun和。Meteor.renderMeteor.renderList

在第二种情况下var players = Players.find();,在 Meteor 启动时运行,并包含它在启动时查询时获得的数据。

首先,您将查询置于反应式上下文中。每当有某种数据更新时,它就会被调用并重新运行。在第二种情况下,它没有机会重新运行查询,它保留了浏览器刚刚加载页面时包含的数据。

虽然 Meteor 是响应式的,但您仍然需要在响应式上下文中重新查询数据。

于 2013-02-19T07:53:09.563 回答