17

Estoy usando el adaptador Jerome's localStorage con Backbone y funciona muy bien para las colecciones.Guardar un modelo en el almacenamiento local

Pero ahora tengo un único modelo que debo guardar. Entonces en mi modelo establecí:

localStorage: new Store("msg") 

Luego hago mis guardias y obtengo. Mi problema es que cada vez que realizo una actualización e inicializo mi aplicación, una nueva representación de mi modelo se agrega a localStorage, ver debajo.

¿Qué estoy haciendo mal?

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

Respuesta

29

Me encontré con el mismo problema. Tal vez usted tiene algo similar a esto

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

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

he cambiado a

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

localStorage cheque adaptador para identificación como

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

por lo 0 o "" de Identificación costumbre trabajo y va a devolver todo modelos en uno

+0

correcta! Gracias @lublushokolad;) – guillaumepotier

+0

Realmente aprecio que lo señale. Acabas de terminar un dolor de cabeza de un día de duración !!! –

+3

Vinculación a pregunta/problema en github https://github.com/jeromegn/Backbone.localStorage/issues/56 –

6

Soy nuevo en la red troncal. js también, pero parece que el modelo de persistencia es análogo a las tablas de la base de datos. Es decir, está diseñado para crear/eliminar/leer registros de una tabla. El adaptador localStorage hace lo mismo, entonces lo que está haciendo ahí es crear una "tabla" Msg en localStorage, y crear un nuevo "registro" Msg cada vez, y el adaptador le da a cada Msg nuevo un ID único.

Si solo tiene un objeto, probablemente sea más fácil simplemente usar localStorage directamente. El API es muy sencillo:

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

Tenga en cuenta que sólo se ocupa de localStorage pares clave/valor como cadenas, por lo que se necesitaría para convertir a/desde el formato de cadena.

Eche un vistazo a esta pregunta para obtener más en hacer que:

Storing Objects in HTML5 localStorage

Cuestiones relacionadas