I am trying to invoke a Meteor method not with a hard-coded string but with a Session
variable which contains its name. It works once but does not re-run the method when the Session
value is changed via Session.set
.
Server code:
Meteor.methods({
hello: function () {
console.log("hello");
},
hi: function () {
console.log("hi");
}
});
Client code:
Session.set('say', 'hi');
Meteor.call(Session.get('say')); // console prints hi
Session.set('say', 'hello'); // console is not printing, expected hello
How can I get the "new" method to be called after the Session
value is changed, reactively?
You need a reactive context to achieve this kind of home-made reactivity.
You can achieve this simply with 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 use that kind of context to achieve reactivity in templates.
Note that you don't need Session
here. A simple ReactiveVar
would be enough:
const say = new ReactiveVar('hi');
Tracker.autorun(function callSayMethod() {
Meteor.call(
say.get()
);
});
Meteor.setTimeout(
() => say.set('hello'),
2000
);