Meteor Iron Router,Pub Sub造成奇怪的行为

时间:2015-06-07 10:54:50

标签: javascript mongodb meteor publish-subscribe iron-router

我正在努力使唱片页面成为使用铁做几件事的路线:路由器

  1. 使用模板postPage
  2. 订阅singlePostuserStatus的发布(显示单个帖子的作者的状态和信息'),comments
  3. 抓取Comments
  4. 字段的postId : this.params._id个文档
  5. Session.get('commentLimit')
  6. 增加评论列表

    以下是我目前的代码。

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

    一切正常,但我发现有一件事是不一致的。 这是我遇到的问题......

    1. 用户进入单个帖子页面并添加评论(一切正常)。
    2. 用户进入另一个单独的帖子页面并添加评论(一切正常)。
    3. 以下是问题的开始
      • 用户随时进入另一条不是单一帖子的路线。
    4. 用户返回单个帖子页面
      • 评论未显示。
      • 新评论将添加到数据库中但仍无法显示
    5. meteor reset或手动删除MongoDB中的所有注释时,此问题才会消失。
    6. 有没有更好的方法可以编写我的路由和相关代码来阻止这种奇怪的行为发生?

      即使有更好的练习。

2 个答案:

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