如何在我的模板助手中强制重新运行一个函数

时间:2014-06-05 10:35:33

标签: meteor

我创造了一个小游戏,我希望在一个玩家等待某个动作时显示对手的名字。为了显示我的对手名字,我有以下功能。

Template.Details.helpers({
   opponentName: function() {
      var opponentId =  _.without(this.players, Meteor.userId)[0];
      var oppDoc =  Meteor.users.findOne({_id: opponentId});
      return oppDoc;
})

在我的模板中

<template name='opponent'>
 <h3> {{opponentName.username}} </h3>
</template>

这将首次返回正确的用户名。但是,此后用户名不会更改。我认为这是因为我的var opponentId不会改变。

我在想一种让这种反应的方法。因此,当reactieve数据源(Meteor.userId)更改函数时,opponentId将重新运行并返回一个新的userId。

执行此操作的正确方法是什么,我是否仍然在模板助手中执行此操作?

编辑:

我也尝试了以下内容:

 Template.Details.helpers({
       opponentName: function() {
          var id = Games.findOne({_id: this._id}, {isCreating: 1})
          var opponentId =  _.without(this.players, id)[0];
          var oppDoc =  Meteor.users.findOne({_id: opponentId});
          return oppDoc;
    })

我的想法是,因为isCreating正在更新id是被动的,因此会更新所有内容。但这也不起作用。

1 个答案:

答案 0 :(得分:1)

需要将

Meteor.userId()作为函数调用,以便正确注册反应式依赖项。所以只需在末尾添加这些括号,你应该全部设置。

可能导致问题的另一件事是this.players的价值。当对手改变时,这会被反应更新吗?