我正在测试Meteor的一些例程,我想知道这是正常活动还是我有错...
我将逐步描述:
我发布我的收藏品只是为了得到我想要的东西
Meteor.publish('decisions', function (decisionCursor) {
return Decisions.find({ active: true }, { limit: 20, skip: decisionCursor });
});
Meteor.publish('decisionsToModerate', function (decisionCursor) {
return Decisions.find({ active: false }, { sort: { createdAt: -1 }, limit: 1, skip: decisionCursor });
});
我将我的客户订阅到两个收藏出版物
Meteor.startup(function () {
SimpleSchema.debug = true;
Session.setDefault('decisionCursor', 0);
Deps.autorun(function () {
Meteor.subscribe("decisions", Number(Session.get('decisionCursor')));
Meteor.subscribe("decisionsToModerate", Number(Session.get('decisionCursor')));
});
});
我设置函数来检索两个集合,以防止每次调用查询...
activeDecisions = function() {
var decisions = Decisions.find({active: true});
console.log(decisions.fetch().length); // PROBLEM HERE
return decisions;
};
moderateDecisions = function() {
return Decisions.find({active: false});
};
我创建了我的观看内容
Template.home.activeDecisions = function() {
var decisions = activeDecisions();
return decisions;
};
正如您所看到的,在 client / lib / environment.js 上,我为您添加了一行,以查看我在哪里看到问题...
当我去http://localhost:3000/
铁路线载荷时
this.route('home', {
path: '/',
layoutTemplate: 'masterLayout'
});
如果我使用Chrome控制台,就像我在 client / lib / environment.js 上写的那样,它应该返回一行包含多个Decisions
文档,在这种情况下我只有3个有效决策,但Chrome输出:
0 environment.js?9868bbbef2024c202fd33213ed060f067dadbe75:3
3 environment.js?9868bbbef2024c202fd33213ed060f067dadbe75:3
3 environment.js?9868bbbef2024c202fd33213ed060f067dadbe75:3
三行,第一行告诉我,我有0个文件(什么?我有三个活动文件)接下来两行告诉我我想知道的是什么,我有三个文件。
我想要这个号码,因为我想在一个会话变量中设置它,每次调用该查询时都会更新它,因为如果我把它设置在其他地方(比如说Template.home.rendered
)我会发出两个查询那会慢一点。
所以我看到的问题是,我不知道为什么Meteor写入控制台三次,如果我告诉它只写一次,当查询被解析为变量时...如果我设置会话它将为0 ,然后3然后3 ...这可能会导致一些错误?
答案 0 :(得分:1)
模板助手形成一个反应性上下文 - 如果它们内部的反应变量得到更新,则助手将再次运行。因此,只要activeDecisions
返回的光标得到更新,您就会看到该行被打印到控制台。
首次渲染模板时,函数打印0
是完全合理的。请记住,在呈现模板之前,您订阅的文档可能尚未到达客户端。随着新文档的到达或更新,activeDecisions
将再次进行评估。有关详细信息,请参阅我的blog post类似主题。
回到原来的问题,您可以将会话变量设置为光标数(BTW调用cursor.count()
比cursor.fetch().length
更有效)。当该计数更新时,您的会话变量也将更新。因为会话变量是被动的,所以它的所有依赖关系将再次重新运行,等等。