Meteor 有一个 Session,它在客户端上提供了一个全局对象,您可以使用它来存储任意一组键值对。使用它来存储列表中当前选定项目之类的内容。
它支持 Session.set、Session.get 和 Session.equals。
如何删除会话名称、值对?我找不到 Session.delete(name) 吗?
Meteor 有一个 Session,它在客户端上提供了一个全局对象,您可以使用它来存储任意一组键值对。使用它来存储列表中当前选定项目之类的内容。
它支持 Session.set、Session.get 和 Session.equals。
如何删除会话名称、值对?我找不到 Session.delete(name) 吗?
[注意:此答案适用于 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()
先将键设置为未定义,然后手动删除它们。像这样:
// 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}}
而categories是一个数组,如果你删除session key,你的模板会继续显示categories的最后一个值。