修复此页面控制台中引发的此错误:http://salestrack.meteor.com/demos/overview:
Exception in queued task: TypeError: Cannot read property 'emails' of undefined at Object.Template.demoOverviewItem.helpers.ownerRep (http://localhost:3000/client/views/overviews/demo_overview_item.js?
以下是他们所指的帮助:
ownerRep: function(){
var rep = Meteor.users.findOne({_id: this.userId});
var repEmail = rep.emails[0].address,
repArr = [],
repArr = repEmail.split('@');
return repArr[0];
}
});
将查询插入到一个包含块中,该包含块循环遍历#each demos并从demos集合中查找this.userId并将其与用户匹配以返回演示名称的所有者。
以下是模板:
<template name="demosOverview">
<div class="container-fluid">
<div class="row-fluid col-lg-10 col-lg-offset-1">
<table class="table table-striped table-hover table-bordered dataTable" id="editable- sample">
<thead>
<tr>
<th>Rep</th>
<th>SFID</th>
<th>Date Set</th>
<th>Closed</th>
</tr>
</thead>
<tbody>
{{#each demos}}
{{> demoOverviewItem}}
{{/each}}
</tbody>
</table>
</div>
</div>
</template>
<template name="demoOverviewItem">
<tr>
<td>{{ownerRep}}</td>
<td> <a href="{{pathFor 'demoPage'}}">{{sfid}}</a>
<a href="{{sfid}}" class="pull-right" target="blank" title="Salesforce">
<img src="/img/salesforce-logo.png" height="16" width="16">
</a>
</td>
<td>{{dateset}}</td>
<td>{{closed}}</td>
</tr>
</template>
我将Meteor.users.find()从服务器发布到客户端,但尚未将其配对,仅发送到某些字段(为了便于黑客攻击)。
奇怪的是它正常工作并按预期返回演示所有者的电子邮件地址。当我重新加载页面时会抛出错误,但是当我从网站的其他位置导航到错误时,则会抛出错误。
看起来像是在等待。出现错误或其他什么地方,当我点击重新加载它不知道currentUser = true所以它在意识到我已登录之前抛出错误 - 这只是一个理论。我用谷歌搜索,StackOv和IRCed无济于事。
答案 0 :(得分:2)
在页面重新加载时,您还没有客户端的用户。 试试
var rep = Meteor.users.findOne({_id: this.userId});
if (rep) {
var repEmail = rep.emails[0].address, (..)
}
一旦findOne拥有它正在寻找的数据,它应该重新运行。