我想创建一条我可以回复评论的路线(... / comments /:_ id / reply),但我在发布与评论相关的帖子时遇到了问题。
以下是代码:
出版物
Meteor.publish('commentUser', function(commentId) {
var comment = Comments.findOne(commentId);
return Meteor.users.find({_id: comment && comment.userId});
});
Meteor.publish('commentPost', function(commentId) {
var comment = Comments.findOne(commentId);
return Posts.find({_id: comment && comment.postId});
});
Meteor.publish('singleComment', function(commentId) {
return Comments.find(commentId);
});
路线
this.route('comment_reply', {
path: '/comments/:_id/reply',
waitOn: function() {
return [
Meteor.subscribe('singleComment', this.params._id),
Meteor.subscribe('commentUser', this.params._id),
Meteor.subscribe('commentPost', this.params._id)
]
},
data: function() {
return {
comment: Comments.findOne(this.params._id)
}
}
});
评论回复模板
<template name="comment_reply">
<div class="small-12 columns">
{{# with post}}
{{> postItem}}
{{/with}}
</div>
<div class="small-12 columns">
{{#with comment}}
{{> comment}}
{{/with}}
</div>
{{> commentReplySubmit}}
</template>
评论回复助手
Template.comment_reply.helpers({
postItem: function() {
return Posts.findOne(this.comment.postId);
}
});
当我访问该路线时,{{#with comment}}会正确呈现,但{{#with post}}不会出现。如果我尝试仅渲染{{&gt; postItem}}没有{{#with post}}它呈现html,但没有数据。
控制台打印此警报:您使用缺少的参数调用Route.prototype.resolve。 &#34; _id&#34;没有在params中找到
提前致谢!
答案 0 :(得分:1)
当您尝试将模板拆分为较小的模板时会发生什么?如果我没有弄错的话,我认为你不能有多个数据上下文,除非它有相同的_Id。在这种情况下,帖子和评论_Id会有所不同,会像你得到的那样抛出错误。尝试这样的事情:
<template name="comment_reply">
<div class="small-12 columns">
{{# with post}}
{{> postItem}}
{{/with}}
</div>
</template>
<template name="postItem">
<div class="small-12 columns">
{{#with comment}}
{{> comment}}
{{/with}}
</div>
</template>
<template name="comment">
{{> commentReplySubmit}}
</template>
您可能不得不使用模板和路由的语法。
希望这有帮助!
答案 1 :(得分:1)
我认为你混淆了模板post
的名称(虽然没有给出代码)和模板助手postItem
。
{{#with post}}
{{> postItem}}
{{/with}}
应该是
{{#with postItem}}
{{> post}}
{{/with}}
或者你有一个名为postItem
的模板和模板助手吗?
#
和with
之间还有一个空格,我不确定是否允许这样做。
另外
Template.comment_reply.helpers({
postItem: function() {
return Posts.findOne(this.comment.postId);
}
});
应该是
Template.comment_reply.helpers({
post: function() {
return Posts.findOne(this.comment.postId);
}
});