2012-07-22 30 views

Antwort

6

Ich habe es nicht versucht, aber es gibt eine knockout.localStorageproject on GitHub, die scheint, was Sie suchen.

Mit diesem Plugin sollten Sie in der Lage sein, ein Objekt als zweites Argument zu übergeben, wenn Sie Ihre Observable erstellen, die das Observable in localStorage speichert.

Aus der Dokumentation:

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

ko.applyBindings(viewModel); 
+1

Ich habe das verwendet, funktioniert wirklich gut und ist sehr sauber und ordentlich. –

6

Sie können eine Bibliothek verwenden, wie amplify.js die Objekte zu local (Cross-Browser) serialisiert werden kann. Auch ältere Browser greifen auf ältere Storage-Tools zurück. Entpacke zunächst die Observablen in ein JSON-Objekt und verwende amplify.store, um das Objekt zu serialisieren und zu speichern. Dann können Sie es wieder herausziehen und es zu einem beobachtbaren Objekt zurückverwandeln, wenn Sie es holen wollen.

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

+2

Nur eine Anmerkung, AmplifyJS scheint Cookies von Version '1.0 beta' nicht zu unterstützen [http://amplifyjs.com/changelog/] – jamiebarrow

2

Ich arbeitete eine Lösung auf Basis der subscribe Funktion von KnockoutJS. Es dauert ein Modell und beharrt alle observable Eigenschaften.

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(); 
     } 
    } 
}; 

prüfen http://keestalkstech.com/2014/02/automatic-knockout-model-persistence-offline-with-amplify/ für Code und JSFiddle Beispiel.