保存和恢复包含嵌套observableArrays的observableArray

时间:2013-02-07 23:04:46

标签: javascript json knockout.js

我有一个模型需要保存到JSON并根据需要重新加载。这个想法是用户可以将模型保存到购物篮或数据库(作为JSON字符串),然后重新加载它。创建JSON并保存它很简单,但重新加载似乎要困难得多。问题是我的模型包含一些类似于Knockout Contacts示例的复杂对象:

http://knockoutjs.com/examples/contactsEditor.html

我甚至可以生成JSON并通过Web服务将其传递给.NET对象。

我查看了用于加载数据模型的Knockout文档:

http://knockoutjs.com/documentation/json-data.html

...我可以轻松恢复我的“简单”可观察量,但我不知道如何初始化我的复杂对象数组,其中这些对象也包含可观察数组。有什么想法吗?

我甚至尝试使用映射插件,但生成的JSON不包含数组中的信息。

这样做会创建JSON,我的所有数据都在那里:

var jsonData = JSON.stringify(ko.toJS(self.contacts), null, 2)

理想情况下,我只需要反转它或者至少逐个创建所有对象。

感谢您寻找:)

1 个答案:

答案 0 :(得分:0)

映射插件工作。我不确定我是否理解你的情况,但尝试这样的事情:

ViewModel = function() {
    this.contacts = ko.observableArray();
}

var model = new ViewModel();

ko.applyBindings(model);

var json = '{"contacts":[{"name":"Tom","phones":["00000000","1111111111"]},{"name":"Bill","phones":["222222222","333333333"]},{"name":"Bert","phones":["444444444","55555555"]}]}';

ko.mapping.fromJSON(json, {}, model);

每个联系人中的“contacts”和“phones”的observableArray都是从json字符串中正确反序列化的。

http://jsfiddle.net/k4Sth/1/