17

मैं बैकबोन के साथ Jerome's localStorage एडाप्टर का उपयोग कर रहा हूं और यह संग्रह के लिए बहुत अच्छा काम करता है।स्थानीय भंडारण में एक मॉडल सहेजना

लेकिन, अब मेरे पास एक ऐसा मॉडल है जिसे मुझे सहेजने की आवश्यकता है। तो मेरे मॉडल में मैंने सेट किया:

localStorage: new Store("msg") 

तब मैं अपनी बचत करता हूं और प्राप्त करता हूं। मेरी समस्या यह है कि हर बार जब मैं रीफ्रेश करता हूं और अपना ऐप शुरू करता हूं तो मेरे मॉडल का एक नया प्रतिनिधित्व स्थानीय स्टोरेज में जोड़ा जाता है, नीचे देखें।

मैं क्या गलत कर रहा हूं?

window.localStorage.msg = { 
    // Created after first run 
    "1de5770c-1431-3b15-539b-695cedf3a415":{ 
    "title":"First run", 
    "id":"1de5770c-1431-3b15-539b-695cedf3a415" 
    }, 
    // Created after second run 
    "26c1fdb7-5803-a61f-ca12-2701dba9a09e":{ 
    "0":{ 
     "title":"First run", 
     "id":"1de5770c-1431-3b15-539b-695cedf3a415" 
    }, 
     "title":"Second run", 
     "id":"26c1fdb7-5803-a61f-ca12-2701dba9a09e" 
    } 
    } 

उत्तर

29

मैं एक ही मुद्दे में भाग गया। हो सकता है कि आप इस

var Settings = Backbone.Model.extend({ 
    localStorage: new Store("Settings"), 
    defaults: { a: 1 } 
}); 

var s = new Settings; 
s.fetch(); 

मैं आईडी अभ्यस्त काम के लिए

case "read": resp = model.id ? store.find(model) : store.findAll(); break; 

तो 0 या "" तरह

आईडी के लिए
var s = new Settings({ id: 1 }); 

localStorage एडाप्टर की जांच करने के लिए बदल करने के लिए कुछ इसी तरह की है और यह सब वापस आ जाएगी एक

+0

सही! धन्यवाद @ ल्यूबलशोकोलैड;) – guillaumepotier

+0

मैं वास्तव में आपको यह इंगित करने की सराहना करता हूं। तुमने सिर्फ एक दिन का सिरदर्द समाप्त कर दिया !!! –

+3

github में प्रश्न/समस्या से लिंक करना https://github.com/jeromegn/Backbone.localStorage/issues/56 –

6

में मॉडल मैं बैकबोन के लिए नया हूं। जेएस भी, लेकिन ऐसा लगता है कि दृढ़ता मॉडल डेटाबेस टेबल के समान है। ऐसा कहने के लिए, यह किसी तालिका से रिकॉर्ड बनाने/हटाने/पढ़ने के लिए डिज़ाइन किया गया है। स्थानीय स्टोरेज एडाप्टर वही करता है, इसलिए आप वहां क्या कर रहे हैं, स्थानीय स्टोरेज में एक संदेश "तालिका" बना रहा है, और प्रत्येक बार एक नया संदेश "रिकॉर्ड" बना रहा है, और एडाप्टर प्रत्येक नए संदेश को एक अद्वितीय आईडी देता है।

यदि आपके पास सिर्फ एक ऑब्जेक्ट है, तो बस स्थानीय स्टोरेज का उपयोग करना संभवतः आसान है। एपीआई वास्तव में सीधे आगे है:

localStorage.setItem("key","value"); 

मन LocalStorage कि तारों के रूप में कुंजी/मान जोड़े के साथ ही सौदों में रखें, ताकि आप के लिए/परिवर्तित करने के लिए स्ट्रिंग प्रारूप से देख सकते हैं।

एक नज़र है कि कर के बारे में अधिक के लिए एक इस सवाल लें:

Storing Objects in HTML5 localStorage

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