来自reactiveVar流星的显示值

时间:2018-04-05 13:39:55

标签: meteor reactive

在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 }

现在,我正在使用一个额外的变量来实现这一点,我想避免这种情况。

1 个答案:

答案 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在处理简单数据时会派上用场。