gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:04:01 25 4
gpt4 key购买 nike

情况是这样的。我有一个我正在订阅并向用户展示的游戏列表。即 {_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com