了解Meteor中服务器与客户端的跳过

时间:2015-10-26 18:25:44

标签: meteor iron-router

我只是想检查,因为我没有在文档中看到它。也许我只是错过了它。

据我所知,如果我订阅了skip,那么我不会跳过客户端。正确的吗?

我正在使用铁路由器。我有这样的代码

Router.route('/docs/:_page', {
  template: 'doclist',
  subscriptions: function() {
    var page = parseInt(this.params._page) - 1;
    var skip = page * 10;
    var limit = 10;
    return Meteor.subscribe("pages", skip, limit);
  },
});

相应的发布就是这个

Meteor.publish("pages", function (skip, limit) {
  return Docs.find({}, {skip: skip, limit: limit});
});

但是现在在模板助手中我没有使用跳过AFAICT,因为MiniMongo中只有limit个结果

  Template.doclist.helpers({
    docs: function () {
      var route = Router.current();
      var pageId = parseInt(route.params._page) || 1;
      var page = pageId - 1;
      var skip = page * 10;
      return Docs.find({}, {
         // skip: skip   
         limit: limit,
      });
    },
  });

似乎有效。如果我在skip行中发表评论,那么我在第2页就没有结果。

这是正确的还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

您是对的 - 在这种情况下,客户端不需要skip。假设您在DB中有100个文档,并且您跳过前20个,限制为10.然后客户端上只存在10个文档。每当你find在客户端(在你的模板中),你正在查询本地数据库(在这种情况下是10个文档),所以跳过是不合适的。

我要提醒的是,所有这一切都取决于您对Docs只有订阅的概念。要扩展上面的示例,如果您在另一个订阅的客户端上的同一集合中有另外15个文档,那么您可能需要进行一些额外的过滤,以便仅显示您感兴趣的那些。