2014-07-15 43 views
0

我有一個幫手,我想要訪問不同集合的屬性。無法訪問cursor.fetch()的結果數組的屬性。

Template.notification.helpers({ 

    username: function() { 

     game = Games.findOne({_id: this.gameId}, {fields: {players:1}}); 
     console.log(game) // output is correct 
    } 
}) 

如果我登錄這一點,它西港島線產生的結果,我預計:

Object {players: Array[2], _id: "qF3skjX2755BYcr8p"} 

但是,如果我在助手功能我嘗試使用/到達這個性質我得到一個未定義的錯誤。

Template.notification.helpers({ 

    username: function() { 

     game = Games.findOne({_id: this.gameId}, {fields: {players:1}}); 
     console.log(game._id) // error; 
     console.log(game.players) // error 
    } 
}) 

輸出:

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

這究竟是爲什麼?

回答

1

發生這種情況是因爲當您的Web瀏覽器上加載Meteor initiall時,所有html和js都已準備就緒,但數據尚未準備就緒。

如果您試圖檢查console.log(game)它可能是null。它只在頁面加載完成時才這樣做。如果您在所有數據下載後加載模板,則不會看到此問題。

當數據到達時,幫助器username將重新運行新數據。

在你只需要利用這個異常的護理與此同時:

var game = Games.findOne({_id: this.gameId}, {fields: {players:1}}); 
if(!game) return null;