javascript - 将 meteor 调用的结果响应式(Reactive)添加到当前数据上下文

标签 javascript meteor

情况是这样的。我有一个我正在订阅并向用户展示的游戏列表。即 {_id: '325jfsd3253', gameName: 'shoot2', EarnAchievements: 20} 并且每个游戏都有另一个集合中的成就列表,即 {_id: '324545fe23', gameId: ' 325jfsd3253',成就名称:'救世主'。我试图获得总成就数,而不必订阅每个游戏的每个成就记录。我通过在每个游戏模板 gameTemplate.onCreated 函数中对服务器执行 Meteor.call() 来实现此目的,该函数返回每个游戏的总成就计数。目前,我正在尝试使用响应式(Reactive)变量来设置从 meteor 调用返回的值,如下所示。

Template.gameTemplate.onCreated = function() { 
    //the reactive var is set beforehand. this.data._id is the game id
    Meteor.call('getGameCount', this.data._id, function(error, result)   {
        if (error) return;
        reactiveVarForCount = result;
    }
}

然后像这样在助手中使用响应式(Reactive)变量

remainingAchievements: function () {
    //the earnedAchievements of the game is within the parent context
    var parentData = Template.parentData(1);
    var totalAchievements = totalAchievementDependency.get();
    if (parentData && totalAchievements) {
        return totalAchievements - parentData.earnedAchievements;
    }
    //return 100;
}

但是, react 变量会针对每个游戏进行重置,因此最终只会保存要计数的最后一个游戏的结果值(最后一次调用 Meteor 方法 getGameCount 时)。 将 Meteor 方法调用的结果附加到当前数据上下文并使其具有反应性的最佳方法是什么,以便在返回新数据并重新运行帮助程序时 UI 更新。

最佳答案

这个问题其实是我自己回答的。通过将 react 性变量放在 onCreated 回调中并将其附加到模板实例,我能够正确地确定其范围,并为模板的每个实例都有一个 react 性变量。

Template.myGame.onCreated = function() {
   var self = this;
   var self.achiCount = new ReactiveVar();
   Meteor.call('getGameCount', self.data._id, function(err, res) {
       if (err) return;
       self.achiCount.set(res);
  });
}

然后您可以通过模板实例访问响应式变量,如下所示:

Template.myGame.helpers({
   getCount: function() {
      //this will be the reactive var value and will be reactive
      return Template.instance().achiCount.get();
   }
});

关于javascript - 将 meteor 调用的结果响应式(Reactive)添加到当前数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34468389/

相关文章:

javascript - Bootstrap 日期时间选择器选择所选日期之前的日期

javascript - Meteor User 表取值

meteor - 如何在服务器端使用响应式(Reactive)变量

javascript - 跟踪器计算在生产中不起作用

javascript - 我怎样才能添加温度。 meteor 发布的字段

javascript - 如何在 ExtJS 存储代理中更改 extraParams 的分隔符?

javascript - jquery 删除标签文本

javascript - 是否可以将 html 传递到 Gojs 中的滚动表中?

javascript - 一个对象可以未定义但具有已定义的属性吗? (Javascript)

security - meteor XSS代码篡改