我有一个这样的模板助手
Template.index.allUpcomingGames = function() {
return Games.find({date: {$gte: new Date()}}, {sort: {date: 1}});
};
因此,如果我正确阅读文档,则每当此查询结果更改时,都应重新呈现模板。
我看到的实际行为是,当我第一次加载页面(空的 minimongo 缓存)时,模板没有呈现任何结果。当检测到增量更改并强制重新呈现模板时,项目会神奇地出现,因此大概是在查询返回之前发生初始页面加载,并且随后不会像我预期的那样被动地重新呈现。我究竟做错了什么?管理查询模板依赖项的最佳实践是什么?
更新 - 发布/订阅信息
应该包括发布/订阅。非常简单,我只是在此刻发布所有内容,尽管一旦它起作用,它会变得更聪明。我已经删除了自动发布包。
发布
Meteor.publish("allGames", function(userId) {
return Games.find();
});
订阅
Meteor.subscribe("allGames", this.userId);
如您所见,我还没有使用 userId
更新 2 - 最小测试用例
我已将其简化为可重现的东西,看起来我对收藏存在根本的误解。我在这里整理了3个测试用例:
https://github.com/antiBaconMachine/meteorCollectionRenderingTests
我看到的 3 个测试的输出是
- 没有游戏
- 一个计数,后跟与流星服务器启动次数相等的记录
- 没有游戏
我希望第一个测试能够反应性地呈现,因为forEach
应该获取我认为被车把调用的{{#each}}
文档。来自流星文档:
游标是一种反应式数据源。第一次在响应式计算(例如,模板或自动运行)中使用 fetch、map 或 forEach 检索游标的文档时,Meteor 将注册对基础数据的依赖关系。
第二个测试按我的预期工作,这让我感到困惑,因为唯一的区别是我检索了计数。
我假设最后一次测试失败,因为我在文档准备好之前获取文档并且一旦检索到查询不再是反应性的?这只是一个猜测。
对此的任何见解将不胜感激,我有点迷茫。