我有以下可观察数组:

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/

10-13 00:31