流星辅助函数与变量?

时间:2015-07-07 04:41:13

标签: javascript function meteor

我试图在我的网站上显示所有在线用户的数量,并安装了meteor-user-status插件来帮助解决这个问题。我认为我所要做的就是添加一个模板助手

Template.header.helpers({
    numOnline: Meteor.users.find({"status.online":true}).count()
});

就像这样,并在我的标题模板中包含{{numOnline}}变量。但是,由于某种原因,这导致总是在线显示0个用户。但是,当我在javascript控制台中运行方法Meteor.users.find({" status.online":true})。count()时,它会在线提供正确数量的用户。

稍微搞砸了一下之后,我把它包装在一个函数中来实现它:

Template.header.helpers({
    numOnline: function(){
        return Meteor.users.find({"status.online":true}).count();
    }
});

这种变化使它完美地运作,但我不知道为什么。有人可以解释为什么有必要将它包装在一个函数中吗?

2 个答案:

答案 0 :(得分:1)

添加Christian Fritz,我认为可能发生这种情况的唯一原因是第一种情况numOnline: Meteor.users.find({"status.online":true}).count()该集合在评估模板时尚未就绪并指定0或空数组{ {1}}因为订阅返回了,并且在第二种情况下,因为函数将在集合中发生更改时作出反应,因此这就是为什么将在集合中很快得到值以填充订阅并且函数将得到执行最新的值。只需我的两分钱。如果我错了,请纠正我。

答案 1 :(得分:0)

嗯,这就是它的原因(文档也告诉你)。这需要是一个函数的原因是反应性:为了在以后的某个时间点重新评估该段代码(当一个反应数据源改变了值时),你需要有一个函数。