在meteor中,如何使用reactiveVar插入和显示值。 我需要存储和显示一个对象。
设定值
this.test = new ReactiveVar({});
let temp = {};
_.each(usms, function(usm){
Meteor.call(functionName, parameterPassed, function(err, res){
if(!err)
this.test.set([parameterPassed] = res);
});
});
显示值
return Template.instance().test.get([paraMeterPassed]);
基本上这就是我想要存储数据的方式: {id:value, id2:value2 }
现在,我正在使用一个额外的变量来实现这一点,我想避免这种情况。
答案 0 :(得分:1)
如果您想避免使用第二个变量,这里有两个选项。
第一个选项是使用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
在处理简单数据时会派上用场。