4

我有以下可观察数组:

self.users = ko.observableArray();

它具有以下对象的项目:

function user(id, name, score) {
    this.id = id;
    this.name = name;
    this.score = ko.observable(score);
}

我需要将此可观察数组本地存储在用户计算机中(简化示例),因此我为此使用 localstorage 和ko.toJSON函数。这工作正常,所有数据都存储在本地存储中,包括score项目,它本身就是一个可观察的。问题是我无法将此字符串转换回可观察数组。当我这样做JSON.parse并将其传递给时self.users score不再可观察到。有什么功能ko.parse可以还原ko.toJSON吗?

4

1 回答 1

4

这实际上非常简单。但是,您最初构建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);
    }));
};

这是使用此方法的工作小提琴。

于 2013-07-27T18:49:02.280 回答