我如何删除或删除会话variables?

meteor有一个会话,在客户端提供一个全局对象,您可以使用它来存储一组任意的键值对。 用它来存储当前选中的项目在列表中。

它支持Session.set,Session.get和Session.equals。

如何删除会话名称,值对? 我找不到Session.delete(名称)?

[注:这个答案是通过至less1.1.0.2meteor0.6.6.2]

[编辑:更新也解释了如何做到这一点,而不是打破反应。 感谢@DeanRadcliffe,@AdnanY,@TomWijsman和@MikeGraf!]

数据存储在Session.keys ,这只是一个对象,所以你可以手动删除键:

 Session.set('foo', 'bar') delete Session.keys['foo'] console.log(Session.get('foo')) // will be `undefined` 

要删除所有的键,您可以简单地将一个空的对象分配给Session.keys

 Session.set('foo', 'bar') Session.set('baz', 'ooka!') Session.keys = {} console.log(Session.get('foo')) // will be `undefined` console.log(Session.get('baz')) // will be `undefined` 

这是最简单的方法。 如果你想确保任何被动处理的依赖被正确地处理,那么确保你也做了类似于@ dean-radcliffe在第一个注释中提出的build议。 使用Session.set()将键设置为undefined,然后手动删除它们。 喜欢这个:

 // Reset one value Session.set('foo', undefined) delete Session.keys.foo // Clear all keys Object.keys(Session.keys).forEach(function(key){ Session.set(key, undefined); }) Session.keys = {} 

Session.keyDeps.fooSession.keyValueDeps.foo仍然会有一些剩余的东西,但不应妨碍。

Session.set('name', undefined)Session.set('name', null)应该工作。

使用delete Session.keys ['foo']的缺点是,如果会话密钥持有数组,则模板不会热重新加载。 例如,如果你在做

 Template.mytempl.helpers({ categories: function() { return Session.get('srch-categories') } }) 

并在您的模板

 {{#if categories}} {{#each categories}} {{this}} {{/each}} {{/if}} 

而类别是一个数组,如果你删除会话密钥,你的模板将继续显示类别的最后一个值。