Meteor不会使#if

时间:2016-03-30 05:56:12

标签: javascript meteor

我有一个模板,可以根据路由参数加载帖子。如果我在*.com/feed/它将加载所有未回复其他帖子的帖子。如果我在*.com/feed/postId,它将加载指定的帖子及其所有回复。回复只是带有指向其父级的指针的常规帖子。

我有一个帮助者返回postId

singlePost: function () { 
  console.log('!');
  return Route.current().params.postId; 
}

我用它来修改我的页面布局

{{#if singlePost}}
  {{#with onePost}}
    {{> post}}
    {{#each replies}}
      {{> post}}
    {{/each}}
  {{/with}}
{{else}}
  {{#each posts}}
    {{> post}}
  {{/each}}
{{/if}}

首次加载时,每次刷新时都能正常运行。但如果我在显示所有帖子的主要提要上,并且我点击一个进入该帖子的页面,Meteor会携带一些旧帖子(通常是三个或四个)。这让我有了

random post

random post

post I want

reply to post

random post

现在,如果我回击,我将返回主要饲料,但我再次带来了帖子。这次我带来了之前的一些随机的加上我试图看到的帖子,也许还有一些回复。这些是冻结的,而不是被动的,不是更新的,手动删除数据库中的所有帖子将删除常规帖子,但不删除冻结的帖子。如果我点击帖子并反复回击,帖子数量会呈指数级增长。

刷新会立即清除它们,但同样的过程会很快重新开始。

如果我将页面布局更改为不具有单个帖子视图

{{#unless singlePost}}
  {{#each posts}}
    {{> post}}
  {{/each}}
{{/unless}}

这里的理论是,只有当用户在主要饲料上时才会看到帖子。点击帖子直接查看,Meteor仍会发帖。来回几次,我有几个冷冻的帖子和我一起旅行。

这使我假设singlePost没有被动,因为#unless永远不会失效,但是控制台日志会在每次页面更改时成功跟踪。如果我将控制台设置为记录帮助程序返回的确切内容的正确性,则会在正确的时刻显示真和假 - 流量忽略此信息并显示帖子。

如果有人对此处发生的事情有任何了解,我们将不胜感激

onePost: function() {
  var post = Router.current().params.post;

  return post ? Threads.findOne({ //Findone so I can use #with instead of #each
    _id: post
    }, {
    sort: {
      timestamp: -1
    }
  }) : false;
},
replies: function() { //Replies are infinitely nested
  var tier = this.ancestors ? this.ancestors.length : 0;
  var size = tier + 1; //A direct child's list of ancestors 
  var query = { //will be one item longer than its parent
    ancestors: {
      $size: size
    }
  }; //And the final item will be its parent
  query['ancestors.' + tier] = this._id;

  return Threads.find(query, {
    sort: {
      timestamp: 1
    }
  });
},
posts: function() { //Posts that are not replies
  var post = Router.current().params.post;
  return post ? false : Threads.find({
    ancestors: {
      $exists: false
    }
  }, {
    sort: {
      timestamp: -1
    }
  });
}

0 个答案:

没有答案