在发布这个问题之前,我做了很多研究,但找不到答案。我确定这是一项简单的任务,但出于某种原因它已经超出了我的头脑。
我有一个"帖子"列出我的收藏中所有项目的类型页面,以及一个"单个帖子"页面显示所选帖子的内容。我有两个分页箭头,用于转到上一个项目和下一个项目。如何获取上一个/下一个帖子的URL并将其显示在我的模板中?
任何帮助将不胜感激,谢谢!
答案 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){});
'棘手'部分是如何撰写查询以接收next
和prev
帖子。
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