基于流星中的日期分页,类似于产品搜索

时间:2015-09-16 22:12:07

标签: meteor pagination

我正在关注Discover Meteor.js书并创建链接共享应用程序,但希望根据周而不是帖子新近度进行分页。

目前,代码的结构是根据网址显示一定数量的帖子:http://localhost:3000/<#ofDisplayedPosts>

但我希望显示最近一周提交的每篇文章,然后是前一周等。

这是发布mongo集合的帖子:

Meteor.publish('posts', function(options){
  check(options, {
    sort: Object,
    limit: Number,
  });
  return Posts.find({}, options);
});

以下是路由器如何将数据传递给客户端

PostsListController = RouteController.extend({
  template: 'postsList',
  increment: 5,
  postsLimit: function() {
    return parseInt(this.params.postsLimit) || this.increment;
  },
  findOptions: function() {
    return {sort: {submitted: -1}, limit: this.postsLimit()};
  },
  subscriptions: function() {
    this.postsSub = Meteor.subscribe('posts', this.findOptions());
  },
  posts: function() {
    return Posts.find({}, this.findOptions());
  },
  data: function() {
    var hasMore = this.posts().count() === this.postsLimit();
    var nextPath = this.route.path({postsLimit: this.postsLimit() + this.increment});
    return {
      posts: this.posts(),
      ready: this.postsSub.ready,
      nextPath: hasMore ? nextPath : null
    };
  }
});

与Product Hunt类似,如何按周对帖子进行分组,将该信息编码到URL&在页面底部创建一个链接以查看上周的帖子?

谢谢!

1 个答案:

答案 0 :(得分:0)

基本流程:

  1. 将路线参数:numberOfDisplayedPosts替换为:startdate,以便您的路线知道将哪个日期用作起点。为了获得更大的灵活性,您可以使用两个路由参数,startdate和enddate,然后您可以查看周,日,月或其他任何内容。
  2. 删除对limit的所有引用,因为您只会使用日期范围。
  3. 根据您的路线参数计算开始和结束日期时间。请注意,mongodb以UTC格式存储日期时间。
  4. 在查询中使用这些日期时间在日期范围内进行选择。
  5. 计算下一页/上一页路线所需的参数。
  6. 您还必须运行下一页/上一页的查询,以查看是否有任何数据,因为无法判断您是否已达到目的。或者,您可以使用最小/最大日期时间来计算出来。
  7. 除非您尝试获取整个集合的最小值或最大值,否则请对客户端进行排序,而不是服务器。