我在我的应用程序中使用了流星分页订阅包。在服务器上,我的出版物如下所示:
Meteor.publish("posts", function(limit) {
return Posts.find({}, {
limit: limit
});
});
在客户端:
this.subscriptionHandle = Meteor.subscribeWithPagination("posts", 10);
Template.post_list.events = {
'click #load_more': function(event, template) {
template.subscriptionHandle.loadNextPage();
}
};
这很好用,但如果所有数据都加载到客户端,我想隐藏 #load_more 按钮,使用这样的帮助器:
Template.post_list.allPostsLoaded = function () {
allPostsLoaded = Posts.find().count() <= this.subscriptionHandle.loaded();
Session.set('allPostsLoaded', allPostsLoaded);
return allPostsLoaded;
};
问题是 Posts.find().count() 返回客户端上加载的文档数量,而不是服务器上可用的数量。
我查看了Telescope项目,它也使用了 meteor-paginated-subscription 包,我看到了我想做的代码:
allPostsLoaded: function(){
allPostsLoaded = this.fetch().length < this.loaded();
Session.set('allPostsLoaded', allPostsLoaded);
return allPostsLoaded;
}
但我不确定它是否真的有效。将他们的代码移植到我的代码中不起作用。
最后,Mongo 看起来确实支持我想做的事情。文档说,默认情况下, cursor.count() 会忽略限制的影响 。
似乎所有的碎片都在那里,但我很难把它们放在一起。