这是我的问题:
我订阅了一个集合的子集,用于"无限的分页"在铁路由器中(如Discover Meteor示例):
ApplicationsListController = RouteController.extend({
template: 'applicationsList',
increment: 10,
limit: function(){
return parseInt(this.params.applicationsLimit) || this.increment;
},
findOptions: function(){
return {sort: {name: 1}, limit: this.limit()};
},
subscriptions: function(){
this.applicationsSub = Meteor.subscribe('applications', this.findOptions()) ;
},
applications: function(){
return Applications.find({}, this.findOptions());
},
data: function(){
var hasMore = this.applications().fetch().length === this.limit();
var nextPath = this.route.path({applicationsLimit: this.limit() + this.increment});
return {
applications: this.applications(),
ready: this.applicationsSub.ready,
nextPath: hasMore ? nextPath : null
};
}
});
//(...)
this.route('applicationsList', {
path: '/applications/:applicationsLimit?',
controller: ApplicationsListController
});
我发布得很好,没问题。但是,在同一页面上,我还需要整个集合的总数(不仅是子集)。我这样发表:
Meteor.publish('applications', function(options){
return Applications.find({}, options);
});
Meteor.publish('applicationsCount', function(){
return Applications.find().count();
});
但有些事我想我不明白。我需要在模板中使用总计数,但我无法查看如何订阅"只是一个数字",而不创建新的集合(我不想要做)。
我已经看到了“房间数”和“房间数量”。 Meteor Doc上的例子,但它似乎远非我需要的东西(我没有空间留言,我只需要计算我的应用程序,而不是将它们全部放在客户端上)。
非常感谢,我希望我足够干净。 祝你有美好的一天。
答案 0 :(得分:1)
如果你想要收集的计数。
$ meteor add tmeasday:publish-counts
所以这就是你的代码看起来应该是一样的。
//server.js
Meteor.publish('applicationsCount', function() {
Counts.publish(this, 'applicationsCount', Applications.find());
});
在lib文件夹上。
if(Meteor.isClient){
Meteor.subscribe('applicationsCount')
Counts.get('applicationsCount');
}
现在看看Counts.get就像一个帮助器,所以你可以像这样在模板上使用它。
<span> There is a Total of {{getPublishedCount 'applicationsCount'}} Applications</span>
答案 1 :(得分:1)
感谢Ethann,我让它发挥了作用。
首先我安装了publish-counts package
$ meteor add tmeasday:publish-counts
正如Ethann所说,我在server\publications.js
Meteor.publish('applicationsCount', function() {
Counts.publish(this, 'applicationsCount', Applications.find());
});
我更新了我的iron-router
控制器:
ApplicationsListController = RouteController.extend({
template: 'applicationsList',
increment: 10,
(...)
subscriptions: function(){
this.applicationsSub = Meteor.subscribe('applications', this.findOptions()) ;
this.applicationsCount = Meteor.subscribe('applicationsCount');
},
(...)
data: function(){
var hasMore = this.applications().fetch().length === this.limit();
var nextPath = this.route.path({applicationsLimit: this.limit() + this.increment});
Counts.get('applicationsCount');
return {
applications: this.applications(),
ready: this.applicationsSub.ready,
nextPath: hasMore ? nextPath : null
};
}
});
最后在我的模板中调用计数:
<span> There is a Total of {{getPublishedCount 'applicationsCount'}} Applications</span>
非常感谢。希望它会帮助这里的一些人。