meteor js - 模板助手在页面首次加载时导致错误

时间:2015-03-03 11:59:40

标签: javascript meteor

我有一个由服务器发布的集合,由客户端订阅并在页面上显示模板助手。这一切都很好,但每次刷新页面都是因为订阅取决于登录用户的userId,看起来好像代码在浏览器知道用户登录之前先运行(我假设?)因此返回错误。

我的代码:

// on the server
Meteor.publish('reputation', function() {
  return Reputation.find({userId: this.userId});
});

// on the client
Reputation = new Mongo.Collection('reputation');

Router.configure({
  layoutTemplate: 'layout',
  loadingTemplate: 'loading',
  notFoundTemplate: 'notFound',
  waitOn: function() { 
    return [Meteor.subscribe('reputation')];
  }
});

声誉模板:

<template name="reputation">
    {{#if reputationCount}}
    <li><a href="#"><span class="badge badge-inverse">{{reputationCount}}</span></a></li>  
    {{/if}}
</template>

和帮手:

Template.reputation.helpers({
  reputationCount: function(){
    return Reputation.findOne({userId: Meteor.userId()}).reputation;
  }
});

我第一次刷新时遇到的错误:

  

模板助手中的异常:TypeError:无法读取属性   &#39;信誉&#39;未定义...

它在此之后工作,只是在控制台中出错时很烦人。我想通过使用&#39; waitOn&#39;在路由器中起作用然后它就不会给出错误,但是我错过了一些我认为明显的东西。

1 个答案:

答案 0 :(得分:0)

请尝试使用此帮助程序代码:

Template.reputation.helpers({
  reputationCount: function(){
    var rep = Reputation.findOne({userId: Meteor.userId()});
    return rep && rep.reputation;
  }
});

这是nice explanation of this behavior