Convert ko.toJSON back to observable array
javascript, knockout.js
Solution
This is actually pretty straightforward. However you initially constructed the `self.users` collection is the same way you will construct it with the JSON data. This is one example:
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);
}));
};
Here is a working fiddle using this method.
Problem
I have the following observable array: ``` self.users = ko.observableArray(); ``` which has an items of the following object: ``` function user(id, name, score) { this.id = id; this.name = name; this.score = ko.observable(score); } ``` I need to store this observable array locally in user's computer (simplified example) so I use localstorage and `ko.toJSON` function for this. This works fine and all the data is stored in localstorage, including the `score` item, which is an observable itself. The problem is that I can't convert this string back to observable array. When I do `JSON.parse` and pass it to `self.users` `score` isn't observable any more. Is there any function like `ko.parse` to revert back `ko.toJSON`?