如何响应式调用响应变量引用的 Meteor 方法?

How to reactively call a Meteor method referenced by a reactive variable?

我正在尝试调用 Meteor 方法,而不是使用硬编码字符串,而是使用包含其名称的 Session 变量。当通过 Session.set.

更改 Session 值时,它只工作一次但不会重新 运行 方法

服务器代码:

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 值更改后被动地调用 "new" 方法?

你需要一个反应上下文来实现这种自制的反应。
您只需使用 Tracker.autorun:

即可实现此目的
Session.set('say', 'hi');

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

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

空格键 template helpers 使用这种上下文来实现模板中的反应性。

请注意,您不需要 Session here. A simple ReactiveVar 就足够了:

const say = new ReactiveVar('hi');

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

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