0

我有一个模型需要保存到 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)

理想情况下,我只需要扭转这一点,或者至少一个一个地创建所有对象。

谢谢你看:)

4

1 回答 1

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);

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

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

于 2013-02-07T23:43:16.973 回答