我有一个由服务器发布的集合,由客户端订阅并在页面上显示模板助手。这一切都很好,但每次刷新页面都是因为订阅取决于登录用户的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;在路由器中起作用然后它就不会给出错误,但是我错过了一些我认为明显的东西。
答案 0 :(得分:0)
请尝试使用此帮助程序代码:
Template.reputation.helpers({
reputationCount: function(){
var rep = Reputation.findOne({userId: Meteor.userId()});
return rep && rep.reputation;
}
});