2016-03-11 51 views
0

在流星中,我如何正確地從集合中返回屬性值(在這種情況下爲響應),以便我可以將其發送到數據屬性?我曾嘗試以下功能:從流星訂閱中獲取反應價值

Responses: function(answer) { 
    return Responses.findOne({answerId: answer.hash.answer}); 
} 

與我在spacebars調用模板爲:

data-selected="{{Responses answer=_id}} 

當我看HTML它說,該數據選擇=「[對象對象]」這並不令人驚訝,但我無法弄清楚如何僅從比賽中返回響應值。我可以添加.response到最後,它的工作原理,但給出了一個預期的'未定義'的錯誤,我知道它沒有反應。我看到人們使用wrapasync,但是這是爲了方法,而不是訂閱。我應該注意到有幾個響應,所以代碼必須適合在響應變量的#for循環中,這些響應變量分別跟蹤每個用戶的輸入。 謝謝!

回答

2

我不確定data-selected =「{{Responses answer = _id}}」。既然你已經在for循環的HTML代碼可以簡單地是這樣的:

data-selected="{{Responses}}" 

內,您的輔助函數,那麼你可以說:

var myResponse = Responses.findOne({answerId: this._id}).response; 
if (myResponse != null){ 
    return myResponse; 
else { 
    return ""; 
} 

當頁面仍在加載和數據尚不可用,myResponse仍然爲空,所以助手返回空字符串「」。此後不久,數據變得可用並且數據得到返回,控制檯中沒有任何錯誤。

+0

哇,非常感謝this._id提示。這真的簡化了事情。在結尾添加.response會產生這樣的錯誤:「模板助手中的異常:TypeError:無法讀取未定義的屬性」響應「,但它確實向數據幫助器輸出了正確的值,所以我認爲這只是一個異步問題,但我不知道如何解決它。 – Coherent

+0

很高興幫助。你可以做的事情是把Response.findOne({answerId:this._id})。response作爲一個變量,然後檢查它是否爲null,如果是,則返回任何內容。可能需要一點時間才能使數據可用,因此此if語句可防止出錯,並在數據可用時自動刷新助手。您永遠不會注意到助手不返回任何內容的最小時間範圍,因爲這是頁面加載的一部分。我更新了我的答案以反映此解決方案。 – Joos