排队任务中抛出的异常 - 助手返回正确的值但抛出错误 - 流星

时间:2014-07-23 20:55:09

标签: meteor

修复此页面控制台中引发的此错误: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无济于事。

1 个答案:

答案 0 :(得分:2)

在页面重新加载时,您还没有客户端的用户。 试试

var rep = Meteor.users.findOne({_id: this.userId}); 
if (rep) {
var repEmail = rep.emails[0].address, (..) 
} 

一旦findOne拥有它正在寻找的数据,它应该重新运行。