Я использую meteor-paginated-subscription в своем приложении. На сервере моя публикация выглядит следующим образом:
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, который также использует пакет пакетной пакетной подписки, и я вижу код, который делает то, что я хочу сделать:
allPostsLoaded: function(){
allPostsLoaded = this.fetch().length < this.loaded();
Session.set('allPostsLoaded', allPostsLoaded);
return allPostsLoaded;
}
Но я не уверен, действительно ли он работает. Портирование их кода в шахту не работает.
Наконец, похоже, что Монго поддерживает то, что я хочу сделать. docs говорят, что по умолчанию cursor.count() игнорирует последствия ограничения.
Кажется, что все части есть, но у меня возникают проблемы с их объединением.