我如何删除或删除会话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.foo
和Session.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}}
而类别是一个数组,如果你删除会话密钥,你的模板将继续显示类别的最后一个值。