Meteor.deps.Context和无效的文档集合

时间:2013-02-19 04:02:25

标签: meteor

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

// 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块中的排行榜示例中对此进行测试。

谢谢你, 安德鲁

1 个答案:

答案 0 :(得分:2)

虽然Meteor是被动的,但您需要在被动上下文中进行查询a.k.a Meteor.autorun。反应性上下文是:TemplateMeteor.autorunMeteor.renderMeteor.renderList

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

在第一个中,您将查询置于反应式上下文中。只要存在排序的数据更新,就会重新调用并重新运行。在第二种情况下,当浏览器刚刚加载页面时,它没有机会重新运行它保留的查询。

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