ko.toJSON メソッドを使用して、observableArray を localStorage に保存しようとしています。最初のページの読み込み時に、アプリはサーバーから JSON オブジェクトを受け取り、observableArray に入力します。最適化とオフラインで使用するために localStorage に保存したいのですが、明らかにデータが入っているのに ko.toJSON が [] を返しています。
このjsFiddleでこの問題を再現できます
HTML
<span data-bind="text: locations().length"></span>
<div data-bind="foreach: locations">
<div>
<span data-bind="text: title"></span>
<span> </span>
<span data-bind="text: timeZone"></span>
</div>
</div>
<pre data-bind="text: output"></pre>
JavaScript
var dataFromServer = [
{name: "Cleveland", zone: "EST"},
{name: "Chicago", zone: "CST"},
{name: "New York", zone: "EST"}
];
var MyNS = window.MyNS || {};
MyNS.ViewModel = function () {
var self = this;
self.locations = ko.observableArray([]);
self.load = function (){
var mappedData = ko.utils.arrayMap(dataFromServer, function(item) {
return new MyNS.Location(item.name, item.zone);
});
self.locations(mappedData);
};
self.output = ko.toJSON(self.locations());
self.execute = function(){
self.load();
ko.applyBindings(self);
};
};
MyNS.Location = function (t, z) {
this.title = t;
this.timeZone = z;
};
var model = new MyNS.ViewModel();
model.execute();