2012-05-24 24 views
40

उल्का का एक सत्र है जो क्लाइंट पर वैश्विक वस्तु प्रदान करता है जिसका उपयोग आप कुंजी-मूल्य जोड़े के मनमानी सेट को स्टोर करने के लिए कर सकते हैं। सूची में वर्तमान में चयनित आइटम की तरह चीजों को स्टोर करने के लिए इसका इस्तेमाल करें।मैं सत्र चर को कैसे हटा या हटा सकता हूं?

यह सत्र.सेट, सत्र.जेट और सत्र.equals का समर्थन करता है।

मैं सत्र नाम, मूल्य जोड़ी कैसे हटा सकता हूं? मुझे सत्र नहीं मिल रहा है। नाम (नाम)?

उत्तर

58

:

[संपादित करें [टिप्पणी इस उत्तर के माध्यम से कम से कम 1.1.0.2 उल्का 0.6.6.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` 

सबसे आसान तरीका है कि। यदि आप यह सुनिश्चित करना चाहते हैं कि किसी भी प्रतिक्रियाशील निर्भरता को सही ढंग से संसाधित किया गया है, तो सुनिश्चित करें कि आप कुछ भी करते हैं जैसे @ डीन-रेडक्लिफ पहली टिप्पणी में सुझाता है। पहली बार अपरिभाषित करने के लिए कुंजी सेट करने के लिए 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 में बात के कुछ अवशेष हो जाएगा, लेकिन यह है कि रास्ते में नहीं होना चाहिए।  

+4

'सत्र' के कवर के तहत जाने और सीधे चाबियों में हेरफेर करने की सलाह नहीं दी जाती है। हालांकि आप इसे प्रत्येक कुंजी नाम के लिए उपयोग कर सकते हैं: 'ऑब्जेक्ट.कीज (सत्र.की) .forEach (फ़ंक्शन (कुंजी) {सत्र.सेट (कुंजी, अपरिभाषित);}) ' –

+1

बहुत अच्छा बिंदु @ डीन रैडक्लिफ, उत्तर अपडेट किया गया। – jpadvo

+2

@ डीन रैडक्लिफ, आपके योगदान के लिए बहुत धन्यवाद। मैं वास्तव में [इस anwser] (http://stackoverflow.com/a/28803605/877353) (जिसे मैंने अभी संपादित किया) का पालन कर रहा था, और यह नहीं मिला कि प्रतिक्रियाशीलता क्यों चली गई। आपके योगदान के बिना, मैं उम्र के लिए भटक गया होगा। आपने धमाल मचाया। बहुत धन्यवाद! –

18

Session.set('name', undefined) या Session.set('name', null) काम करना चाहिए।

+1

क्या वह वास्तव में इसे हटा देता है या केवल मान को अपरिभाषित या शून्य पर सेट करता है? –

+1

@SteeveCannon: नहीं, यह वास्तव में इसे हटा नहीं देता है; लेकिन यह 'सत्र.जेट (' नाम ')' वापस अपरिभाषित या शून्य हो जाएगा। मुझे लगता है कि जब 'सत्र.जेट (' नाम ') का उपयोग नहीं किया गया है, तब भी यह अनिर्धारित नहीं होगा। मुझे कम से कम एक प्रतिक्रियाशील संदर्भ में नहीं, चर को वास्तव में हटाने की कोई ज़रूरत नहीं है। गैर-प्रतिक्रियाशील भंडारण के लिए आपको अधिकतर कुछ बढ़ाना (लगातार) या केवल कुछ चर (अस्थायी) का उपयोग करना चाहिए। –

+0

यह काम करता है अगर आप इसे अपरिभाषित पर सेट करते हैं। मैंने इसे शून्य पर सेट करने का परीक्षण नहीं किया है। सत्र कुंजी/मूल्य जोड़ी तुरंत गायब नहीं होती है लेकिन क्षण बाद में यह करता है। जीसी से संबंधित होना चाहिए। धन्यवाद –

6

हटाएं सत्र.की ['foo'] का उपयोग करने के साथ नुकसान यह है कि यदि सत्र कुंजी एक सरणी रखती है तो आपका टेम्पलेट गर्म पुनः लोड नहीं होगा। उदाहरण के लिए, आप

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

और कर रहे हैं अपने टेम्पलेट

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

और श्रेणियों में एक सरणी है, यदि आप सत्र कुंजी हटाने के लिए, अपने टेम्पलेट श्रेणियों का अंतिम मान प्रदर्शित करने के लिए जारी रहेगा।

संबंधित मुद्दे