Meteor有一个Session,它在客户端上提供一个全局对象,可用于存储任意一组键值对。用它来存储列表中当前所选项目之类的内容。
它支持Session.set,Session.get和Session.equals。
如何删除会话名称,值对?我找不到Session.delete(名字)?
答案 0 :(得分:61)
[注意:这个答案适用于Meteor 0.6.6.2至至少1.1.0.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在第一条注释中所建议的内容。使用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
中仍会有一些遗留物,但这不应该妨碍。
答案 1 :(得分:19)
Session.set('name', undefined)
或Session.set('name', null)
应该有效。
答案 2 :(得分:6)
使用删除Session.keys [' foo']的缺点是,如果会话密钥包含数组,则模板不会热重新加载。例如,如果你正在做
Template.mytempl.helpers({
categories: function() {
return Session.get('srch-categories')
}
})
并在您的模板中
{{#if categories}}
{{#each categories}}
{{this}}
{{/each}}
{{/if}}
类别是一个数组,如果删除会话密钥,模板将继续显示类别的最后一个值。