Meteor + Iron-Router:如何使用pathFor调用集合中的下一个项目?

时间:2014-08-28 00:21:58

标签: meteor iron-router

在发布这个问题之前,我做了很多研究,但找不到答案。我确定这是一项简单的任务,但出于某种原因它已经超出了我的头脑。

我有一个"帖子"列出我的收藏中所有项目的类型页面,以及一个"单个帖子"页面显示所选帖子的内容。我有两个分页箭头,用于转到上一个项目和下一个项目。如何获取上一个/下一个帖子的URL并将其显示在我的模板中?

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:1)

我创建的示例应用程序正是您所需要的。 请检查一下:https://github.com/parhelium/meteor-so-post-next-prev/tree/master

简要说明此代码的重要部分(请参阅repo以查找更多详细信息):

服务器端

首先你需要一些模型:

 {title:"1 post", createdAt:moment("01-10-1995", "DD-MM-YYYY").toDate()}

并发布功能:

Meteor.publish("postDetailsNext",function(postId){ });
Meteor.publish("postDetailsPrev",function(postId){ });
Meteor.publish("postDetails",function(postId){});

'棘手'部分是如何撰写查询以接收nextprev帖子。

Meteor.publish("postDetailsNext",function(postId){

      // load post object which should be displayed in 'postDetails' route
      var post = Posts.findOne({_id:postId});

      // find one post from sorted cursor which is older than main post 
      return Posts.find({createdAt:{$gt:post.createdAt}},{sort:{createdAt:1}, limit:1})
});

和类似的:

Meteor.publish("postDetailsPrev",function(postId){  
      var post = Posts.findOne({_id:postId});
      return  Posts.find({createdAt:{$lt:post.createdAt}},{sort:{createdAt:-1}, limit:1})
  });

请注意,上述发布函数的查询在sort field中有所不同。

客户端

this.route('postDetails',{
      where:'client',
      path:'/post/:_postId',
      template:'postDetails',
      waitOn:function(){
        return [
            Meteor.subscribe('postDetails', this.params._postId),
            Meteor.subscribe('postDetailsPrev', this.params._postId),
            Meteor.subscribe('postDetailsNext', this.params._postId)
        ]
      },
      data:function(){
        var post = Posts.findOne({_id:this.params._postId});
        if(post == null) return {};
        else
            return {
                post : Posts.findOne({_id:post._id}, {limit:1}),
                prev : Posts.findOne({createdAt:{$lt:post.createdAt}},{sort:{createdAt:-1}}),
                next : Posts.findOne({createdAt:{$gt:post.createdAt}},{sort:{createdAt:1}})
            }
        }
      }
    })

答案 1 :(得分:0)

您可以在不使用铁路由器路径的情况下执行此操作

通过使用此包https://github.com/alethes/meteor-pages,它提供了使用分页的各种选项

您也可能有兴趣查看此网址 Best pattern for pagination for Meteor http://www.youtube.com/watch?v=WSwe_weshQw