我有一个不反应的Meteor助手。 如何检测到新的密钥已添加到Session中,以便我的帮助程序重新运行?
'sessions': function() { // FIXME: not reactive
return _.keys(Session.keys).sort();
}
谢谢! :)
编辑:我知道Session本身就是被动的。但是Session字典的键不是。我希望能够检测到添加了新的会话密钥。
答案 0 :(得分:1)
您可以使用Tracker
来实现此目的。
Session
是ReactiveDict
的一个实例,并且无法“订阅”所有密钥。
实现此操作涉及通过猴子修补覆盖原始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
的原型来使其更加通用。