[英]Save Knockout observableArray JSON to localStorage
我正在嘗試使用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();
問題是當位置數組為空時, output
變量的值只在構造函數的第一次運行時寫入一次。 要更新位置更改的輸出,可以將其轉換為計算的observable,如下所示:
self.output = ko.computed(function(){
return ko.toJSON(self.locations())
});
更新的小提琴: http : //jsfiddle.net/wvgRL/4/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.