Подтвердить что ты не робот

Как удалить или удалить переменные сеанса?

В Meteor есть сеанс, который предоставляет глобальный объект клиенту, который вы можете использовать для хранения произвольного набора пар ключ-значение. Используйте его для хранения вещей, подобных текущему выбранному элементу в списке.

Он поддерживает Session.set, Session.get и Session.equals.

Как удалить имя сеанса, пару значений? Я не могу найти Session.delete(имя)?

4b9b3361

Ответ 1

[примечание: этот ответ для Meteor 0.6.6.2, по крайней мере, 1.1.0.2]

[edit: обновлено, чтобы также объяснить, как это сделать, не нарушая реактивности. Благодаря @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 все еще останутся некоторые вещи, но это не должно мешать.  

Ответ 2

Session.set('name', undefined) или Session.set('name', null) должны работать.

Ответ 3

Недостаток использования delete Session.keys ['foo'] заключается в том, что ваш шаблон не будет перезагружать, если ключ сеанса содержит массив. Например, если вы делаете

Template.mytempl.helpers({
    categories: function() {
        return Session.get('srch-categories')
    }
})

и в вашем шаблоне

{{#if categories}}
    {{#each categories}}
        {{this}}
    {{/each}}
{{/if}}

И категории - это массив, если вы удалите ключ сеанса, ваш шаблон будет продолжать отображать последнее значение категорий.