2014-04-02 108 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