Meteor:读取会话密钥并被激活

时间:2016-05-11 10:21:03

标签: meteor

我有一个不反应的Meteor助手。 如何检测到新的密钥已添加到Session中,以便我的帮助程序重新运行?

  'sessions': function() { // FIXME: not reactive
    return _.keys(Session.keys).sort();
  }

谢谢! :)

编辑:我知道Session本身就是被动的。但是Session字典的键不是。我希望能够检测到添加了新的会话密钥。

1 个答案:

答案 0 :(得分:1)

您可以使用Tracker来实现此目的。

SessionReactiveDict的一个实例,并且无法“订阅”所有密钥。

实现此操作涉及通过猴子修补覆盖原始set()方法。

这样做的一种方法是为整个dict创建一个Tracker依赖项,并在每次设置一个键时使其无效:

import { Tracker } from 'meteor/tracker';
import { Session } from 'meteor/session';

const originalSet = Session.set;
Session.keyDependendy = new Tracker.Dependency();

Session.set = function() {
  originalSet.apply(this, arguments);
  this.keyDependendy.changed();
}

// in your helper
'sessions': function() {
  Session.keyDependendy.depend();
  return _.keys(Session.keys).sort();
}

您还可以通过修补ReactiveDict的原型来使其更加通用。