我可以将Meteor会话变量重置为它吗';默认值是多少?
我想将Meteor会话变量重置为其默认值-可能吗 例如:我可以将Meteor会话变量重置为它吗';默认值是多少?,meteor,Meteor,我想将Meteor会话变量重置为其默认值-可能吗 例如: Session.setDefault 'foo', 'bar' Session.get 'foo' # => 'bar' Session.set 'foo', 'boing' Session.get 'foo' # => 'boing' delete Session.keys['foo'] Session.get 'foo' # => undefined 但是我想要类似于resetToDefault的东西,它将执行以下
Session.setDefault 'foo', 'bar'
Session.get 'foo' # => 'bar'
Session.set 'foo', 'boing'
Session.get 'foo' # => 'boing'
delete Session.keys['foo']
Session.get 'foo' # => undefined
但是我想要类似于resetToDefault
的东西,它将执行以下操作(在上述操作之后):
没有类似于
resetToDefault
的功能
Session.setDefault
的实现方式如下:
setDefault: function (key, value) {
var self = this;
// for now, explicitly check for undefined, since there is no
// ReactiveDict.clear(). Later we might have a ReactiveDict.clear(), in which case
// we should check if it has the key.
if (self.keys[key] === undefined) {
self.set(key, value);
}
},
您可以做的是创建具有所有默认值的js对象,然后,一旦您想要重置,您只需访问该对象,并使用Session.set(key,value)
我想出了这个密码:
function MyReactiveDict(keys){
ReactiveDict.call(this,keys);
this.defaults={};
}
MyReactiveDict.prototype=Object.create(ReactiveDict.prototype);
_.extend(MyReactiveDict.prototype,{
setDefault:function(key,value){
ReactiveDict.prototype.setDefault.call(this,key,value);
this.defaults[key]=value;
},
resetToDefault:function(key){
this.set(key,this.defaults[key]);
}
});
MySession=new MyReactiveDict();
会话是ReactiveDict
的一个实例,因此我所做的是通过继承常规ReactiveDict
来定义我们自己的MyReactiveDict
,添加我们想要的功能,最后将MySession
声明为MyReactiveDir
的一个实例
MySession
将通过您在答案中描述的测试
我认为,通过使用以下代码保留已定义的密钥,您甚至可以安全地覆盖应用程序中的会话
:
Session=new MyReactiveDict(Session.keys);
这是因为ReactiveDict
构造函数可以从一组现有键开始
您需要将反应式dict添加到应用程序中,此代码才能正常工作。这是我的解决方案:只需创建一个函数,在其中设置所有会话变量。然后你称之为函数
resetToDefault = function() {
Session.set('expertMode', false);
Session.set('displayNavigation', false);
Session.set('displaySidebar', true);
Session.set('currentEvent', null);
Session.set('activeLayers', []);
};
resetToDefault();
如果您确保您的函数是在client/lib下定义的,因此它将在调用其他所有函数之前被调用,那么您也可以使用它来代替Session.setDefault()
之后,您可以从客户端的任何位置调用resetToDefault()
Session=new MyReactiveDict(Session.keys);
resetToDefault = function() {
Session.set('expertMode', false);
Session.set('displayNavigation', false);
Session.set('displaySidebar', true);
Session.set('currentEvent', null);
Session.set('activeLayers', []);
};
resetToDefault();