我有一个模型需要保存到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)
理想情况下,我只需要反转它或者至少逐个创建所有对象。
感谢您寻找:)
答案 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字符串中正确反序列化的。