我根据从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不是一个有效的淘汰模型。有没有办法做到这一点?
感谢
答案 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);