2014-04-02 71 views
0

我定义一个简单的辅助:流星帮手示数

ccFees: function(){ 
    var event = Events.findOne(this._id); 
    return event 
} 

,它返回对象:[对象对象]

但是当我添加一个属性,该属性存在,该对象的像这样:

ccFees: function(){ 
    var event = Events.findOne(this._id); 
    return event.cost 
} 

......它错误。

Exception from Deps recompute function: TypeError: Cannot read property 'cost' of undefined 

奇怪的是,信息显示为预期在第一渲染,但如果我修改例如对象初始创建后,那么它的错误。任何帮助,将不胜感激。这是一项超级常规任务,但它是轰炸。这可能与Blaze有关吗?

回答

2

属性确实存在,但不是对象。客户端的数据库调用只返回已经通过订阅通道获取的内容,因此在从服务器拉出对象之前,findOne方法可以返回null。我不确定为什么在更新后发生这种情况,但这是一般的想法。

修复的方法是简单的:添加一个保障来检查你的工作对象是否存在:

ccFees: function() { 
    var event = Events.findOne(this._id); 
    if(!event) return ''; 
    return event.cost; 
}, 

在这种简单的例子,你可以把它写在短期形式:

ccFees: function() { 
    var event = Events.findOne(this._id); 
    return event && event.cost; 
}, 
+0

我很努力去理解。如果我们从数据库请求文档,并将其分配给一个变量并返回该变量,并且字面上在页面上您会看到[object Object],并且当我们控制台记录返回的变量时,我们可以检查该对象并查看“cost “坐在那里准备好被调用,为什么要对该属性进行范围导致错误?这看起来像是一项常规任务。谢谢你的回应,只是想明白。 – Colton45