我正在努力使唱片页面成为使用铁做几件事的路线:路由器
postPage
singlePost
,userStatus
的发布(显示单个帖子的作者的状态和信息'),comments
。Comments
postId : this.params._id
个文档
Session.get('commentLimit')
以下是我目前的代码。
Router.js
Router.route('/posts/:_id', {
name: 'postPage',
subscriptions: function() {
return [
Meteor.subscribe('singlePost', this.params._id),
Meteor.subscribe('userStatus'),
Meteor.subscribe('comments', {
limit: Number(Session.get('commentLimit'))
})
];
},
data: function() {
return Posts.findOne({_id:this.params._id});
},
});
Publications.js
Meteor.publish('singlePost', function(id) {
check(id, String);
return Posts.find(id);
});
Meteor.publish('comments', function(options) {
check(options, {
limit: Number
});
return Comments.find({}, options);
});
Template.postPage.onCreated
Template.onCreated( function () {
Session.set('commentLimit', 4);
});
Template.postPage.helpers
Template.postPage.helpers({
comments: function () {
var commentCursor = Number(Session.get('commentLimit'));
return Comments.find({postId: this._id}, {limit: commentCursor});
},
});
Template.postPage.events
Template.postPage.events({
'click a.load-more-comments': function (event) {
event.preventDefault();
Session.set('commentLimit', Number(Session.get('commentLimit')) + 4)
}
});
一切正常,但我发现有一件事是不一致的。 这是我遇到的问题......
meteor reset
或手动删除MongoDB中的所有注释时,此问题才会消失。有没有更好的方法可以编写我的路由和相关代码来阻止这种奇怪的行为发生?
即使有更好的练习。
答案 0 :(得分:1)
您的发布是在没有任何postId
过滤器的情况下发布评论。
您的助手,按postId
过滤。也许发表的4条评论不属于当前开放的帖子?
您可以尝试更新,订阅
Meteor.subscribe('comments', {
postId: this.params._id
}, {
limit: Number(Session.get('commentLimit'))
})
和您的出版物
Meteor.publish('comments', function(filter, options) {
check(filter, {
postId: String
});
check(options, {
limit: Number
});
return Comments.find(filter, options);
});
这样只发布相同帖子的评论?
答案 1 :(得分:0)
我已经弄清楚了。我已更新以下代码。
到目前为止,它没有表现出奇怪的行为......
<强> Publications.js 强>
Meteor.publish('comments', function(postId, limit) {
check(postId, String);
check(limit, Number);
return Comments.find({postId:postId}, {limit:limit});
});
<强> Router.js 强>
Router.route('/posts/:_id', {
name: 'postPage',
subscriptions: function () {
return [
Meteor.subscribe('singlePost', this.params._id),
Meteor.subscribe('userStatus'),
Meteor.subscribe('comments', this.params._id, Number(Session.get('commentLimit')))
];
},
data: function() {
return Posts.findOne({_id:this.params._id});
},
});