Meteor有一个Session,它在客户端上提供一个全局对象,可用于存储任意一组键值对.用它来存储列表中当前所选项目之类的内容.
它支持Session.set,Session.get和Session.equals.
如何删除会话名称,值对?我找不到Session.delete(名字)?
jpa*_*dvo 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`
Run Code Online (Sandbox Code Playgroud)
要删除所有键,只需将空对象分配给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`
Run Code Online (Sandbox Code Playgroud)
这是最简单的方法.如果您想确保正确处理任何反应依赖关系,请确保您还执行@ 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 = {}
Run Code Online (Sandbox Code Playgroud)
仍然会有的东西一些残部Session.keyDeps.foo和Session.keyValueDeps.foo,但不应该成为障碍.
Tam*_*man 19
Session.set('name', undefined)或者Session.set('name', null)应该工作.
使用delete Session.keys ['foo']的缺点是,如果会话密钥包含数组,则模板不会热重新加载.例如,如果你在做
Template.mytempl.helpers({
categories: function() {
return Session.get('srch-categories')
}
})
Run Code Online (Sandbox Code Playgroud)
并在您的模板中
{{#if categories}}
{{#each categories}}
{{this}}
{{/each}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)
而类别是一个数组,如果删除会话密钥,模板将继续显示类别的最后一个值.
| 归档时间: |
|
| 查看次数: |
20989 次 |
| 最近记录: |