アプリで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() が、サーバーで利用可能な数ではなく、クライアントにロードされたドキュメントの数を返すことです。
meteor-paginated-subscription パッケージも使用するTelescopeプロジェクトを調べたところ、やりたいことを実行するコードが見つかりました。
allPostsLoaded: function(){
allPostsLoaded = this.fetch().length < this.loaded();
Session.set('allPostsLoaded', allPostsLoaded);
return allPostsLoaded;
}
しかし、それが実際に機能しているかどうかはわかりません。彼らのコードを私のものに移植してもうまくいきません。
最後に、Mongo は私のやりたいことをサポートしてくれているようです。ドキュメントによると、デフォルトでは、cursor.count() は limit の影響を無視します。
部品は揃っているようですが、組み立てるのに苦労しています。