Как реализовать MVVM с автономным хранилищем и Knockout.js?

Я могу реализовать Mvvm с помощью Knockout.js. Но я хочу использовать его с кросс-браузером (FF и Chrome), поддерживаемым автономным хранилищем Html 5.

Я хочу привязать html-объекты к автономному хранилищу.


person ozz    schedule 22.07.2012    source источник


Ответы (4)


Я не пробовал, но есть knockout.localStorage проект на GitHub, похоже, это то, что ты ищешь.

С помощью этого плагина вы должны иметь возможность передавать объект в качестве второго аргумента при создании своего наблюдаемого объекта, который сохраняет наблюдаемый объект в localStorage.

Из документации:

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

ko.applyBindings(viewModel);
person Christofer Eliasson    schedule 22.07.2012
comment
Я использовал это, работает очень хорошо и очень чисто и аккуратно. - person Adam Marshall; 05.09.2013

Вы можете использовать библиотеку, такую ​​​​как amplify.js, которая может сериализовать объекты в localStorage (кросс-браузер). Он также использует старые инструменты хранения для старых браузеров. Сначала разверните наблюдаемые объекты в объект JSON, затем используйте amplify.store для сериализации объекта и его сохранения. Затем вы можете вытащить его обратно и сопоставить с наблюдаемым объектом, когда захотите его получить.

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

person John Papa    schedule 22.07.2012
comment
Просто примечание: похоже, что AmplifyJS не поддерживает файлы cookie, начиная с версии 1.0 beta [ amplifyjs.com/changelog] - person jamiebarrow; 23.01.2013


Я разработал решение, основанное на функции subscribe KnockoutJS. Он принимает модель и сохраняет все свойства 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();
        }
    }
};

Проверьте http://keestalkstech.com/2014/02/automatic-knockout-model-persistence-offline-with-amplify/ для кода и примера JSFiddle.

person Kees C. Bakker    schedule 02.02.2014