Meteor:如何在设置变量时激活模板的帮助程序

时间:2015-09-15 09:25:13

标签: meteor

我有这个帮手:

Template.showScannedData.helpers({
    'lastConnectionNetId': function(){ 
        return Connections.findOne().netId; 
    }
});

与以下模板相关联:

<template name="showScannedData">
    {{#if lastConnectionNetId}}}
       my last connection's id: {{lastConnectionNetId}}<br>
    {{/if}}
</template>

问题是,直到我实际上没有向连接集合添加内容(在Cordova中完成,通过从NFC标记获取一些数据然后将其存储在MongoDB中),我得到以下异常:

  

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

我理解异常是由数据可用之前激活的模板引起的。

也是&#34;隐藏&#34;对用户的问题(即没有显示不完整的UI),我在模板中添加了一个检查

  

如果是lastConnectionNetId

这是正确的方法吗?

只要集合为空,我该如何避免出现异常?

2 个答案:

答案 0 :(得分:1)

我是你的情况,findOne返回一个对象。如果没有文档满足查询,则该方法返回null。这意味着您的对象将为空,netId将是未定义的。我会试试这个:

Template.showScannedData.helpers({
    'lastConnection': function(){ 
        return Connections.findOne(); 
    }
});

<template name="showScannedData">
    {{#if lastConnection}}}
       my last connection's id: {{lastConnection.netId}}<br>
    {{/if}}
</template>

这可以解决您的问题。

答案 1 :(得分:1)

您应该检查我之前的评论here,您需要等待数据加载。

此外,如果您仍然不确定集合中是否有任何数据,您应该创建如下的帮助:

 'lastConnectionNetId': function(){ 
   return Connections.findOne() && Connections.findOne().netId; 
 }

有关Meteor防御性编程的更多信息,请访问here