2012-07-22 14 views

Respuesta

6

No lo he probado, pero hay un knockout.localStorageproject on GitHub, que parece ser lo que estás buscando.

Con ese complemento, debe poder pasar un objeto como un segundo argumento, cuando crea su observable, lo que guarda el observable en localStorage.

De la documentación:

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

ko.applyBindings(viewModel); 
+1

Lo he usado, funciona muy bien y es muy limpio y ordenado. –

6

Se puede utilizar una biblioteca como amplify.js que puede serializar objetos a localStorage (navegadores). También recurre a herramientas de almacenamiento más antiguas para navegadores más antiguos. Primero, desenvuelva los observables en un objeto JSON, luego use amplify.store para serializar el objeto y almacenarlo. Luego puede volver a sacarlo y asignarlo a un objeto observable cuando desee recuperarlo.

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

+2

Solo una nota, AmplifyJS no parece admitir las cookies de la versión '1.0 beta' en adelante [http://amplifyjs.com/changelog/] – jamiebarrow

2

He resuelto una solución basada en la característica subscribe de KnockoutJS. Toma un modelo y persiste todas las propiedades 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(); 
     } 
    } 
}; 

Comprobar http://keestalkstech.com/2014/02/automatic-knockout-model-persistence-offline-with-amplify/ para el código y el ejemplo jsFiddle.

Cuestiones relacionadas