2011-07-19 11 views
7

Si verificano problemi nel salvataggio degli oggetti Backbone.Model o Backbone.Collection nell'archiviazione locale. Il problema è che quando si salva, solo gli attributi vengono salvati e io non lo voglio. Attualmente sto usando il backbone-localstorage che è fornito nella loro demo TODO di esempio.Salvataggio del modello Backbone e raccolta in stringa JSON

Questa è la loro funzione di salvataggio

save: function() {   
    localStorage.setItem(this.name, JSON.stringify(this.data)); 
} 

Quando guardo a quello che JSON.stringify (this.data) ritorna, vedo solo i modelli o gli attributi della collezione diventa set. C'è un modo per specificare che voglio salvare l'intero stato in cui si trova il modello e la collezione, non solo gli attributi?

risposta

12

Sovrascrivere Model.toJSON o Collection.toJSON per restituire i dati che si desidera serializzare.

Il Model.toJSON di default solo restituisce gli attributi:

toJSON : function() { 
    return _.clone(this.attributes); 
} 

della Collezione toJSON utilizza toJSON del modello:

toJSON : function() { 
    return this.map(function(model){ return model.toJSON(); }); 
} 
+0

Ma in realtà sto chiamando JSON.stringify non model.toJSON() quindi, non dovrebbe essere l'intero modello impostato come stringa e non solo gli attributi? A meno che JSON.stringify non chiami model.toJSON()? – dchhetri

+2

Questo è il modo in cui funziona JSON.stringify. https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify "Se un oggetto da stringificare ha una proprietà chiamata toJSON il cui valore è una funzione, allora il metodo toJSON personalizza il comportamento di stringificazione JSON: invece del oggetto serializzato, il valore restituito dal metodo toJSON quando chiamato verrà serializzato. " –

+0

Oh capisco. Lo proverò. – dchhetri

Problemi correlati