1

我正在尝试调用 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值更改后响应地调用“新”方法?

4

1 回答 1

3

你需要一个响应式上下文来实现这种自制的响应式。
您可以通过以下方式简单地实现这一点Tracker.autorun

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

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

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

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

请注意,这里不需要Session。一个简单的ReactiveVar就足够了:

const say = new ReactiveVar('hi');

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

Meteor.setTimeout(
  () => say.set('hello'),
  2000
);
于 2016-03-02T09:06:06.327 回答