如何反应调用由反应变量引用的Meteor方法?

时间:2016-03-02 08:17:15

标签: javascript meteor meteor-methods

我试图调用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值被更改之后调用“新”方法?

1 个答案:

答案 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
);