如何使用离线存储和Knockout.js实现MVVM?

时间:2012-07-22 15:04:40

标签: html5 mvvm knockout.js offline-storage

我可以用Knockout.js实现Mvvm。但我希望将它与跨浏览器(FF和Chrome)支持的Html 5离线存储一起使用。

我想将html对象绑定到脱机存储。

4 个答案:

答案 0 :(得分:6)

我没有尝试过,但有一个knockout.localStorage project on GitHub,这似乎就是你要找的。

使用该插件,您应该能够在创建observable时将对象作为第二个参数传递,这会将observable保存到localStorage中。

来自文档:

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

ko.applyBindings(viewModel);

答案 1 :(得分:6)

您可以使用诸如amplify.js之类的库,它可以将对象序列化为localStorage(跨浏览器)。它也适用于旧版浏览器的旧版存储工具。首先,将observable展开到JSON对象,然后使用amplify.store来序列化对象并存储它。然后,当您想要获取它时,可以将其拉出并将其映射回可观察对象。

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

答案 2 :(得分:4)

答案 3 :(得分:2)

我根据KnockoutJS的subscribe功能制定了一个解决方案。它需要一个模型并保留所有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示例。