以下两段代码有什么区别?顶部按预期工作,但底部没有。
// 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块中的排行榜示例中对此进行测试。
谢谢你, 安德鲁
答案 0 :(得分:2)
虽然Meteor是被动的,但您需要在被动上下文中进行查询a.k.a Meteor.autorun
。反应性上下文是:Template
,Meteor.autorun
,Meteor.render
和Meteor.renderList
。
在第二种情况下,当Meteor启动时运行var players = Players.find();
,并包含在启动时查询时获得的数据。
在第一个中,您将查询置于反应式上下文中。只要存在排序的数据更新,就会重新调用并重新运行。在第二种情况下,当浏览器刚刚加载页面时,它没有机会重新运行它保留的查询。
虽然Meteor是被动的,但您仍然需要在被动上下文中重新查询数据。