使用Iron Router发布帖子时出现问题

时间:2013-12-28 19:22:50

标签: javascript mongodb meteor iron-router

我想创建一条我可以回复评论的路线(... / 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中找到

提前致谢!

2 个答案:

答案 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);
     }
});