无法访问cursor.fetch()生成的数组的属性;

时间:2014-07-15 14:52:21

标签: meteor

我有一个帮手,我想要访问不同集合的属性。

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 个答案:

答案 0 :(得分:1)

这是因为当Meteor initiall在您的Web浏览器上加载时,所有的html和js都准备就绪,但数据还没有准备好。

如果您尝试检查console.log(game),则可能是null。它仅在页面加载时执行此操作。如果在下载完所有数据后加载模板,则不会出现此问题。

当数据到达时,username助手会重新运行新数据。

同时你只需要处理这个例外:

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