knockout viewModel:将其保存在localStorage并检索它

时间:2015-04-02 07:41:44

标签: knockout.js

我根据从Web服务获取的一些数据,使用knockout在页面中执行各种操作。用户之后可以选择某些内容并通过一些选择输入来操纵数据,这会影响淘汰赛的viewModel。

当用户完成更改后,它会继续到下一个表单(使用POST),这是另一个网页。

我想要做的是在当前的viewModel离开页面之前将其存储在localStorage中,如果他/她按下,则从localStorage加载viewModel。

所以在我的viewModel用户离开页面之前我做了:

localStorage.setItem("vM", JSON.stringify(self));

然后在我的第一页我有:

var viewModel; viewModel = JSON.parse(localStorage.getItem("vM"));

if(viewModel == undefined || viewModel == null)  viewModel = new vM();

ko.applyBindings(viewModel);

但是从json解析后,viewModel不是一个有效的淘汰模型。有没有办法做到这一点?

感谢

2 个答案:

答案 0 :(得分:1)

当淘汰视图模型被字符串化时,由于可观察性,它不会干净地串行化,因此不能直接反序列化为有效的viewModel。

最好的方法是使用ko.json函数将viewmodel转换为具有所有当前值的普通对象版本。将其保存在localStorage中。

然后你必须像往常一样初始化你的viewModel,并在创建observables时插入localStorage检索对象的值。

更多细节可以在文档中找到: http://knockoutjs.com/documentation/json-data.html

答案 1 :(得分:1)

尝试使用knockout.mapping插件。

Beore save to localStorage来电:

var unmapped = ko.mapping.toJS(viewModel);

使用localStorage使用

中的数据更新模型
ko.mapping.fromJS(data, viewModel);