web-dev-qa-db-ja.com

セッション変数を削除または削除するにはどうすればよいですか?

Meteorには、任意のキーと値のペアのセットを保存するために使用できるクライアント上のグローバルオブジェクトを提供するセッションがあります。これを使用して、現在選択されているアイテムなどをリストに保存します。

Session.set、Session.get、およびSession.equalsをサポートします。

セッション名と値のペアを削除するにはどうすればよいですか? Session.delete(name)が見つかりませんか?

42
Steeve Cannon

[注:この回答は、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_にはまだいくつかの名残がありますが、それは邪魔にならないはずです。

61
jpadvo

Session.set('name', undefined)またはSession.set('name', null)が機能するはずです。

19
Tamara Wijsman

Delete Session.keys ['foo']を使用することの欠点は、セッションキーが配列を保持している場合、テンプレートがホットリロードされないことです。たとえば、あなたがやっている場合

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

テンプレートで

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

カテゴリは配列です。セッションキーを削除すると、テンプレートはカテゴリの最後の値を表示し続けます。

6
Adnan Y