在客户端获取集合大小而不将其订阅到整个集合

时间:2013-01-14 12:18:47

标签: pagination meteor

我正在尝试为我的应用设置分页。除了获取页数之外,大部分工作都有效。分页的主要目的不是在他请求之前将完整的集合发送给客户端,因此我限制了订阅服务器端。因此,集合.count()始终限于客户端上的页面大小。

我尝试过类似的东西,但它不起作用:

Meteor.publish 'count', -> Items.find().count()

1 个答案:

答案 0 :(得分:4)

基本上,您需要一个仅由客户端集合,该集合由自定义发布功能提供。 请参阅http://docs.meteor.com/#meteor_publish关于如何执行此操作的第二个示例。 使用此方法,您可以生成数据,而无需任何相应的服务器端集合。

沿着这些方向:

Meteor.publish("counts", function() {
  var self = this,
      count = 0,
      uuid = Meteor.uuid();

  var handle = TargetCollection.find({}).observe(function() {
    added: function() {
      // Document added, increase count and push it down the pipe.
      count++;
      self.set("counts", uuid, {count: count});
      self.flush();
    },
    removed: function() {
      // Document removed, decrease count and push it down the pipe.
      count--;
      self.set("counts", uuid, {count: count});
      self.flush();
    }
  }
  // Observe only returns after the initial added callbacks have
  // run.  Now mark the subscription as ready.
  self.complete();
  self.flush();

  // stop observing the cursor when client unsubs
  self.onStop(function () {
    handle.stop();
  });
}