2013-02-15 31 views
9

मैं एम्बर.जेएस के साथ प्रयोग कर रहा हूं और एक छोटा ऐप सेटअप कर रहा हूं जहां उपयोगकर्ता लॉगिन और लॉगआउट कर सकते हैं। जब उपयोगकर्ता लॉग आउट करता है तो मैं डेटा स्टोर में वर्तमान में कैश किए गए सभी रिकॉर्ड साफ़ करना चाहता हूं। क्या ऐसा करने का कोई तरीका है या क्या मुझे ब्राउज़र को पृष्ठ को फिर से लोड करने के लिए मजबूर करना होगा?Ember.js डेटा डेटास्टोर को साफ़ करने के लिए कैसे करें

उत्तर

4

डेटा स्टोर को साफ़ करना अभी तक एम्बर-डेटा में समर्थित नहीं है। गीथब ट्रैकर पर open issue concerning this है।

+0

कि इस मुद्दे को बंद कर दिया है, लेकिन मैं अभी भी बिना दुकान समाशोधन का कोई तरीका नहीं देख एप्लिकेशन को रीसेट करना: मुझे डिबगिंग उद्देश्यों के लिए स्टोर को साफ़ करने की आवश्यकता है, संभावित रूप से बैकएंड से डेटा का पुन: अनुरोध करना, अन्यथा मेरे आवेदन की स्थिति को प्रभावित किए बिना (मैं उसी मार्ग में रहना चाहता हूं, उदाहरण के लिए)। क्या यह संभव है? – dangonfast

-1

मॉडल में रिकॉर्ड द्वारा रिकॉर्ड हटाना। this jsBin की deleteOrgs:

deleteOrgs: function(){ 
    var len; 
    while(len = this.get('model.length')) { 
    // must delete the last object first because 
    // this.get('model.length') is a live array 
    this.get('model').objectAt(len-1).deleteRecord(); 
    } 
    this.get('store').commit(); 
} 

(अगस्त 2013 की स्थिति के अनुसार वर्तमान में a problem with lingering deleted data है।)

+2

यह रिकॉर्ड्स को हटा रहा है, जो स्टोर से उन्हें हटाने से * अधिक * है। यह संभावित रूप से खतरनाक है, बैकएंड में स्थायी डेटा हानि ([हटाएं रिकॉर्ड्स] (http://emberjs.com/guides/models/creating-and-deleting-records/#toc_deleting-records)) – dangonfast

6

ऐसा लगता है कि आज के रूप में, अभी भी पूरी तरह से एक दुकान सफाई के लिए मजबूर करने का कोई सामान्य तरीका है, की तरह। सबसे सरल तरीके को अपने सभी प्रकार के माध्यम से लूप करने लगता है (person, ...) और कार्य करें: देखा here

+0

मुझे नहीं पता जब इसे पेश किया गया था लेकिन वर्तमान दस्तावेज बताता है कि आप सभी रिकॉर्ड्स को अनलोड करने के लिए 'store.unloadAll() 'कर सकते हैं। – Daniel

1

एक क्लीनर & सामान्य दृष्टिकोण

store.unloadAll('person'); 

के रूप में। स्टोर & स्टोर को बस विस्तृत या दोबारा खोलें इस तरह की एक स्पष्ट विधि जोड़ें।

DS.Store.extend({ 
 
    clear: function() { 
 
    for(var key in this.typeMaps) 
 
    { 
 
     this.unloadAll(this.typeMaps[key].type); 
 
    } 
 
    } 
 
});

0

है:

App.reset(); 

लेकिन उस does more than clear out the data store और हम कभी कभी त्रुटियों जहां store.pushPayload की कोशिश करता एक वस्तु पर डेटा पुश करने के लिए देखा है App.reset(); कॉल करने से नष्ट कर दिया के रूप में चिह्नित।

गया हम प्रयोग कर रहे:

store.init(); 

कौन सा बस एक नई खाली दुकान बनाता है और अच्छा काम करता है, लेकिन दुर्भाग्य से एक निजी विधि है।

0

अब यह store.destroy() के साथ किया जा सकता है। यह सभी रिकॉर्ड्स को उतार देता है, लेकिन यह नए रिकॉर्ड को पुनः लोड करने में तत्काल उपयोग के लिए भी उपलब्ध है। मैंने इसे 1.0.0-beta.15 के रूप में पुष्टि की है। यह प्रलेखन में प्रतीत नहीं होता है, लेकिन यह मेरे लिए काम कर रहा है।

विकल्प स्टोर की typeMaps और store.unloadAll(typeMap.typeName) चला रहा है, लेकिन मुझे यकीन नहीं है कि यह पूरी तरह से आवश्यक है।

18

मुझे पता है कि यह प्रश्न 2013 से है। लेकिन एम्बर डेटा 1.0.0-बीटा के बाद से।17 (10 मई 2015) वहाँ डेटासंग्रह साफ़ करने का एक सरल तरीका है:

store.unloadAll()

(यहाँ अधिक: http://emberigniter.com/clear-ember-data-store/)

+1

यह स्वीकार्य उत्तर नहीं होना चाहिए? – emberigniter