web-dev-qa-db-fra.com

Comment supprimer ou supprimer des variables de session?

Meteor a une session qui fournit un objet global sur le client que vous pouvez utiliser pour stocker un ensemble arbitraire de paires clé-valeur. Utilisez-le pour stocker des éléments comme l'élément actuellement sélectionné dans une liste.

Il prend en charge Session.set, Session.get et Session.equals.

Comment supprimer un nom de session, une paire de valeurs? Je ne trouve pas un Session.delete (nom)?

42
Steeve Cannon

[note: cette réponse est pour Meteor 0.6.6.2 à au moins 1.1.0.2]

[edit: mis à jour pour expliquer également comment procéder sans interrompre la réactivité. Merci à @DeanRadcliffe, @AdnanY, @TomWijsman et @MikeGraf!]

Les données sont stockées dans Session.keys, Qui est simplement un objet, vous pouvez donc supprimer manuellement les clés:

Session.set('foo', 'bar')
delete Session.keys['foo']

console.log(Session.get('foo')) // will be `undefined`

Pour supprimer toutes les clés, vous pouvez simplement affecter un objet vide à 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`

C'est le moyen le plus simple. Si vous voulez vous assurer que toutes les dépendances réactives sont traitées correctement, assurez-vous également de faire quelque chose comme ce que @ dean-radcliffe suggère dans le premier commentaire. Utilisez Session.set() pour définir d'abord les touches sur non définies, puis supprimez-les manuellement. Comme ça:

// 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 = {}

Il y aura encore des restes de la chose dans Session.keyDeps.foo Et Session.keyValueDeps.foo, Mais cela ne devrait pas gêner.

61
jpadvo

Session.set('name', undefined) ou Session.set('name', null) devrait fonctionner.

19
Tamara Wijsman

L'inconvénient de l'utilisation de delete Session.keys ['foo'] est que votre modèle ne se rechargera pas à chaud si la clé de session contient un tableau. Par exemple, si vous faites

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

et dans votre modèle

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

Et les catégories sont un tableau, si vous supprimez la clé de session, votre modèle continuera à afficher la dernière valeur des catégories.

6
Adnan Y