отображать значение из метеора reactiveVar

Как в метеоре можно вставить и отобразить значение, используя 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: значение, id2: значение2}

На данный момент я использую дополнительную переменную для достижения этого, чего я хочу избежать.


person N G    schedule 05.04.2018    source источник


Ответы (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 пригодится при работе с простыми данными.

person Jankapunkt    schedule 05.04.2018