17

Sto utilizzando l'adattatore Jerome's localStorage con Backbone e funziona perfettamente per le raccolte.Salvataggio di un modello nella memoria locale

Ma, ora ho un singolo modello che ho bisogno di salvare. Così nel mio modello ho impostato:

localStorage: new Store("msg") 

Ho poi fare il mio salva e recupero. Il mio problema è che ogni volta che faccio un aggiornamento e inizializzo la mia app viene aggiunta una nuova rappresentazione del mio modello a localStorage, vedi sotto.

Cosa sto sbagliando?

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" 
    } 
    } 

risposta

29

Ho incontrato lo stesso problema. Forse avete qualcosa di simile a questo

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

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

ho cambiato

var s = new Settings({ id: 1 }); 

localStorage adattatore di controllo per id come

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

così 0 o "" per id abituato lavoro e tornerà tutto modelli in uno

+0

corretta! Grazie @lublushokolad;) – guillaumepotier

+0

Apprezzo molto che tu lo abbia indicato. Hai appena finito un mal di testa lungo giorno !!! –

+3

Collegamento alla domanda/problema in github https://github.com/jeromegn/Backbone.localStorage/issues/56 –

6

Sono nuovo alla dorsale. anche js, ma sembra che il modello di persistenza sia analogo alle tabelle del database. Vale a dire, è progettato per creare/eliminare/leggere i record da una tabella. L'adattatore localStorage fa lo stesso, quindi quello che stai facendo è creare un messaggio "table" in localStorage e creare un nuovo "record" Msg ogni volta, e l'adattatore assegna a ogni nuovo messaggio un ID univoco.

Se si dispone di un oggetto, è probabilmente più semplice utilizzare direttamente localStorage. L'API è davvero semplice:

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

Tenete a mente che LocalStorage si occupa solo di coppie chiave/valore come stringhe, così avresti bisogno di convertire in/dal formato stringa.

Date un'occhiata a questa domanda per più sul fare che:

Storing Objects in HTML5 localStorage