4

次の観測可能な配列があります。

self.users = ko.observableArray();

次のオブジェクトのアイテムがあります。

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

この監視可能な配列をユーザーのコンピューターにローカルに保存する必要があるため (簡略化された例)、これには localstorage とko.toJSONfunction を使用します。これは正常に機能し、すべてのデータは、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 に答える