42

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

Session.set、Session.get、Session.equalsをサポートしています。

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

4

3 に答える 3

61

[注:この回答は、Meteor0.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ません。 

于 2013-10-31T01:35:36.140 に答える
19

Session.set('name', undefined)またはSession.set('name', null)動作するはずです。

于 2012-05-24T22:43:31.823 に答える
6

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

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

とあなたのテンプレートで

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

また、categoriesは配列です。セッションキーを削除すると、テンプレートには引き続きカテゴリの最後の値が表示されます。

于 2015-03-02T07:09:41.213 に答える