2012-07-22 9 views

risposta

6

Non l'ho provato, ma c'è un knockout.localStorageproject on GitHub, che sembra essere quello che stai cercando.

Con questo plug-in, si dovrebbe essere in grado di passare un oggetto come secondo argomento, quando si crea l'osservabile, che salva l'osservabile in localStorage.

Dalla documentazione:

var viewModel = { 
    name: ko.observable('James', {persist: 'name'}) 
} 

ko.applyBindings(viewModel); 
+1

Ho usato questo, funziona molto bene ed è molto pulito e pulito. –

6

È possibile utilizzare una libreria come amplify.js che può serializzare gli oggetti per localStorage (cross browser). Ricade anche ai vecchi strumenti di archiviazione per i browser più vecchi. Innanzitutto, scartare gli osservabili in un oggetto JSON, quindi utilizzare amplify.store per serializzare l'oggetto e memorizzarlo. Quindi puoi estrarlo e mapparlo di nuovo su un oggetto osservabile quando lo vuoi recuperare.

http://amplifyjs.com/api/store/

+2

Solo una nota, AmplifyJS non sembra supportare i cookie dalla versione '1.0 beta' in poi [http://amplifyjs.com/changelog/] – jamiebarrow

2

Ho elaborato una soluzione basata sulla funzione subscribe di KnockoutJS. Prende un modello e mantiene tutte le proprietà observable.

ko.persistChanges = function (vm, prefix) { 

    if (prefix === undefined) { 
     prefix = ''; 
    } 

    for (var n in vm) { 

     var observable = vm[n]; 
     var key = prefix + n; 

     if (ko.isObservable(observable) && !ko.isComputed(observable)) { 

      //track change of observable 
      ko.trackChange(observable, key); 

      //force load 
      observable(); 
     } 
    } 
}; 

Controllare http://keestalkstech.com/2014/02/automatic-knockout-model-persistence-offline-with-amplify/ per il codice e l'esempio JSFiddle.