每个帖子都会出现评论 - 流星

时间:2015-07-22 02:29:42

标签: meteor

已经有两周了,我仍然无法在他们写的帖子中出现评论。每个帖子都会出现每个评论。在尝试了很多不同的教程,信息或视频(基本上谷歌和流星文档给我的所有内容)后,我接近神经衰弱但是我一直在悲惨地失败......

服务器:

Meteor.publish("posts", function () {
    return Posts.find();
});

Meteor.publish("comments", function() {
  return Comments.find();
});

单post.js

Template.singlePost.helpers({
    comments: function () {
      return Comments.find({},{sort: {createdAt: -1}});
    }     
});

Template.singlePost.events({
    "submit .new-comment": function (event) {
        var text = event.target.text.value;
        Meteor.call("addComment", text);
        event.target.text.value = "";
        return false;
    }
});

Inside Meteor.methods:

addComment: function (text) {
    if (! Meteor.userId()) {
        throw new Meteor.Error("not-authorized");
    }

Comments.insert({
  text: text,
  createdAt: new Date(),
  owner: Meteor.userId(),
  username: Meteor.user().username
});
},

最后路由器:

Router.map(function(){
    this.route('top', {path:'/top'});
    this.route('trending', {path:'/trending'});
    this.route('new', {path:'/new'});
    this.route('singlePost', {path:'/post/:_id',
        data:function(){
            return Posts.findOne({_id:this.params._id})
        }
                             });
    })

我知道我没有在路由器中包含评论,或者其他一些关于评论的内容都丢失了,因为我尝试了无数不同的事情并且失败了所以我想为我未来的帮助者保持清洁......

提前致谢!

2 个答案:

答案 0 :(得分:3)

您的评论需要通过ID加入您的帖子。所以addComment应该类似于:

addComment: function (postId, text) {
  check(postId, String);
  check(text, String);

  if (!this.userId) {
    throw new Meteor.Error(403, 'not-authorized');
  }

  Comments.insert({
    text: text,
    createdAt: new Date(),
    owner: this.userId,
    username: Meteor.user().username,
    postId: postId
  });
}

现在,您的所有评论都将通过postId与帖子相关联。然后在你的comments帮助器中,你可以加入这两个:

comments: function () {
  selector = {postId: this._id};
  options = {sort: {createdAt: -1}};
  return Comments.find(selector, options);
}

最后,你的提交活动:

submit: function (event) {
  event.preventDefault();
  var text = event.target.text.value;
  Meteor.call('addComment', this._id, text);
}

以上所有假设当前上下文是post文档,由路由器中的data挂钩指示。

答案 1 :(得分:0)

所有评论都因此而显示:

Template.singlePost.helpers({
  comments: function () {
    return Comments.find({},{sort: {createdAt: -1}});
  }
});

您未通过find()调用任何参数来显示某个帖子的评论。例如:

Template.singlePost.helpers({
  comments: function () {
    return Comments.find({postId: ...},{sort: {createdAt: -1}});
  }
});

我需要查看完整的代码,以提供比此更有帮助的内容。