1

Sessionハードコーディングされた文字列ではなく、その名前を含む変数を使用して Meteor メソッドを呼び出そうとしています。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 に答える