2012-03-28 8 views
8

Il javascript sembra piuttosto semplice, solo localStorage.clear().Come cancellare il backbone localstorage

C'è qualcosa di simile a quello della backbone localstorage e, in caso contrario, qualcuno può indicarmi la giusta direzione su come farlo.

Stavo pensando di fare qualcosa di simile:

localStorage.each (localStorage.delete (questo))

ma questa non sarebbe puntare a questo elemento sarebbe?

+0

Backbone.js non utilizza localStorage out of the box. Stai usando [questo] (https://github.com/jeromegn/Backbone.localStorage) o qualcos'altro? – nrabinowitz

+0

C'è solo un 'localStorage' e il backbone lo sfrutterà. Intendi davvero come cancellare una collezione di backbone? – abraham

+0

Sì, questo è quello che sto usando nrabinowitz, e immagino che sia ciò che intendo Abramo. – prashn64

risposta

5

Pochi modi in cui è possibile eseguire questa operazione dalla Raccolta, ma in qualsiasi modo si scelga, è necessario chiamare la distruzione su ciascun modello, che eseguirà la sincronizzazione e la distruggerà sia sul lato client che sul lato server (che localStorage è comportarsi come).

collection.each(function(model) { 
     model.destroy(); 
    } 
) 

Aggiornamento

Per commenti, non sembra come questo funziona più. Poiché questo è ancora contrassegnato come risposta, inclusa la risposta che dovrebbe funzionare di seguito, per skcin7.

while ((model=collection.shift())) 
    { model.destroy(); 
} 
+0

grazie dc- la funzione destroy è quella che stavo cercando. – prashn64

+0

E se volessi cancellare solo i primi dati aggiunti? – jongbanaag

+0

@ Dreyfus15 quindi chiama semplicemente .destroy() su quell'elemento specifico. Ad esempio: collections.get (id) .destroy(); – ffleandro

5

So che questo tipo di Feels Like tomba di scavo, ma ho cercato per una soluzione a questo per un po 'e nessuno dei frammenti sopra sembrava funzionare per me. Ho sempre finito col diminuire della dimensione della collezione della metà, indipendentemente da come l'avessi provata.

Così, dopo una discreta quantità di giocherellare, mi si avvicinò con questo:

var length = collection.length; 
for (var i = 0; i < length; i++) { 
    collection.at(0).destroy(); 
} 

Backbone è la rimozione di elementi "al volo", quindi se avete 40 articoli non sarà in grado di eliminare il 21. articolo perché sono rimasti solo 20 articoli. Stranamente anche questo sembra influenzare la funzione collection.each() che sembra davvero un bug per me ..

+2

Ho spiegato perché questo accade [qui] (http://stackoverflow.com/a/18395310/722238), insieme a una soluzione. – fbynite

+0

Come si cancella il localStorage se non si sta utilizzando una raccolta ma un singolo modello, voglio solo cancellare la memoria locale dei dati creati ... sta creando una chiave chiamata musica: valore qualche numero letter combo e poi un'altra chiave di musica con il valore di prima e il suo nuovo valore la giusta serie di informazioni che ho ... vedi questa domanda per il codice http://stackoverflow.com/questions/19472777/clear-localstorage-and-change-the-view- backbone – Lion789

1

Solo l'iterazione sulla raccolta e la chiamata destroy su ogni elemento non viene salvata in nessun caso. Il motivo sta iterando su una raccolta modificata allo stesso tempo in grado di produrre risultati imprevisti.

È meglio prima clonare la raccolta e iterare su questo clone. Per ulteriori dettagli, consulta this.each not iterating through collection correctly.

Esempio:

_.chain(Todos.models).clone().each(function(model){ 
    console.log('deleting model ' + model.id); 
    model.destroy(); 
}); 
+0

Invece di '_.chain (Todos.models)' si potrebbe anche fare 'Todos.chain(). clone()'. – Webthusiast

0

Se non si vuole fare questo livello di programmazione, si può sempre aprire la modalità sviluppatore (F12), passare alla scheda Risorse, selezionare "Local Storage" nel riquadro di sinistra ed elimina i record.

Nota: Testato solo in Chrome.