我试图调用Meteor方法,而不是使用硬编码字符串,而是使用包含其名称的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
值被更改之后调用“新”方法?
答案 0 :(得分: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
);