2016-03-02 4 views
1

Я пытаюсь вызвать метод Метеор не с жестко закодированной строкой, а с переменной Session, которая содержит его имя. Он работает один раз, но не перезапускает метод, когда значение Session изменяется с помощью Session.set.Как реагировать на метод Метеор, на который ссылается реактивная переменная?

Серверный код: Код

Meteor.methods({ 
    hello: function() { 
    console.log("hello"); 
    }, 
    hi: function() { 
    console.log("hi"); 
    } 
}); 

Клиент:

Session.set('say', 'hi'); 
Meteor.call(Session.get('say')); // console prints hi 
Session.set('say', 'hello');  // console is not printing, expected hello 

Как я могу получить метод "новый" будет называться после того, как значение Session изменяется, реактивно?

ответ

3

Вам необходим реактивный контекст для достижения такой реакционной способности домашнего приготовления.
Вы можете добиться этого с помощью Tracker.autorun:

Session.set('say', 'hi'); 

Tracker.autorun(function callSayMethod() { 
    Meteor.call(
    Session.get('say') 
); 
}); 

Meteor.setTimeout(
() => Session.set('say', 'hello'), 
    2000 
); 

Spacebars template helpers использование такого рода контекста для достижения реактивности в шаблонах.

Обратите внимание, что здесь не требуется Session. Простого ReactiveVar будет достаточно:

const say = new ReactiveVar('hi'); 

Tracker.autorun(function callSayMethod() { 
    Meteor.call(
    say.get() 
); 
}); 

Meteor.setTimeout(
() => say.set('hello'), 
    2000 
); 

 Смежные вопросы

  • Нет связанных вопросов^_^