如何删除或删除会话变量?

时间:2012-05-24 19:00:33

标签: meteor

Meteor有一个Session,它在客户端上提供一个全局对象,可用于存储任意一组键值对。用它来存储列表中当前所选项目之类的内容。

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

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

3 个答案:

答案 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.fooSession.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}}

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