Здесь у вас есть два варианта, если вы хотите избежать использования второй переменной.
Первый вариант
Первый вариант — использовать пакет reactive-dict
, который представляет собой точное сопоставление значений ключа реактивных переменных. Это будет работать следующим образом:
import { ReactiveDict } from 'meteor/reactive-dict';
// ...
this.state = new ReactiveDict({});
_.each(usms, function(usm){
Meteor.call(functionName, parameterPassed, function(err, res){
if(!err)
this.state.set(parameterPassed, res);
});
});
где я предполагаю, что parameterPassed
- это какой-то ваш ключ. Затем вы можете вернуть значение с помощью
вернуть Template.instance().state.get(paraMeterPassed);
Обратите внимание, что ReactiveDict
может хранить сколько угодно реактивных значений, поэтому я дал ему имя state
. Вы, конечно, можете назвать его как хотите.
Второй вариант
Если вы хотите придерживаться ReactiveVar
, вам не удастся получить текущее значение:
const instance = this;
instance.test = new ReactiveVar({});
_.each(usms, function(usm){
Meteor.call(functionName, parameterPassed, (err, res) => {
if(!err) {
const test = instance.test.get();
test[parameterPassed] = res;
instance.test.set(test);
}
});
});
Но вы можете использовать функцию, которая завершает это для:
const instance = this;
instance.test = new ReactiveVar({});
instance.setTest = function(key, value) {
const dict = instance.test.get();
dict[key] = value;
instance.test.set(dict);
};
instance.getTest = function(name) {
const dict = instance.test.get();
return dict[name];
}
// ...
_.each(usms, function(usm){
Meteor.call(functionName, parameterPassed, (err, res) => {
if(!err) {
instance.setTest(parameterPassed, res);
}
});
});
// ...
return Template.instance().getTest(paraMeterPassed);
Я лично использую ReactiveDict
, когда мне нужно работать с более сложными данными, а ReactiveVar
пригодится при работе с простыми данными.
person
Jankapunkt
schedule
05.04.2018