我有以下可观察数组:
self.users = ko.observableArray();
它具有以下对象的项目:
function user(id, name, score) {
this.id = id;
this.name = name;
this.score = ko.observable(score);
}
我需要将此可观察数组本地存储在用户的计算机中(简化示例),因此我为此使用 localstorage 和
ko.toJSON
函数。这工作正常,所有数据都存储在 localstorage 中,包括 score
项,它本身就是一个可观察的项。问题是我无法将此字符串转换回可观察数组。当我执行 JSON.parse
并将其传递给 self.users
时,score
不再可见。有没有像 ko.parse
这样的函数来恢复 ko.toJSON
? 最佳答案
这实际上非常简单。但是,您最初构建 self.users
集合的方式与使用 JSON 数据构建它的方式相同。这是一个例子:
function User(data) {
this.id = data.id;
this.name = data.name;
this.score = ko.observable(data.score);
}
...
//inside viewmodel
var storage;
self.store = function() {
storage = ko.toJSON(self.users());
self.users.removeAll();
};
self.load = function() {
var parsedUsers = JSON.parse(storage);
self.users(ko.utils.arrayMap(parsedUsers, function(u) {
return new User(u);
}));
};
这是 a working fiddle 使用这种方法。
关于javascript - 将 ko.toJSON 转换回可观察数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17899982/