我有一个应用程序,可以在启动时加载Jobs
集合。
Deps.autorun(function(){
Meteor.subscribe('jobs', Session.get('currentIndustryOnet'));
});
我正在为Handlebars设置这样的工作:
Template.list.jobs = function() {
var jobs;
Deps.autorun(function(){
if(Session.get('currentIndustryOnet')) {
console.log(Jobs.find({onet: Session.get('currentIndustryOnet')}).count());
}
});
if(Session.get('currentIndustryOnet')) {
jobs = Jobs.find({onet: Session.get('currentIndustryOnet')});
} else {
jobs = Jobs.find({})
}
Session.set('jobCount', jobs.count());
return Pagination.collection(jobs.fetch());
}
此外,Session.get('currentIndustryOnet')
由下拉列表中的点击事件设置
我很困惑为什么你必须在模板中设置jobs
,如果它在Deps.autorun中自动更新?
答案 0 :(得分:1)
Meteor.subscribe('jobs', ...)
要求服务器将一组作业文档发布到客户端数据库(minimongo),以便在模板中使用。 This blog post很好地解释了这是如何工作的。应该注意的是,字符串'jobs'
不需要与集合有任何关系 - 它只是一个应该与服务器端的发布函数匹配的标识符。例如,它可能被称为'jobsForCurrentIndustryOnet'(这可能是一个更好的名字)。
订阅所需的数据库子集后,客户端将根据会话变量和Jobs.find
调用的结果反复重绘模板中的作业。
请注意,模板助手应主要关注检索和操作数据。它们不应包括对订阅和自动运行的调用。在您的情况下,您应该删除Deps.autorun
帮助程序内的jobs
,因为每次autorun
帮助程序评估时都会创建一个新的jobs
(可能通常取决于如何你的反应变量正在发生变化。)