如何更新表单中表示的JSON对象

我有一个用于创建表单的JSON对象。 这个JSON对象由KnockoutJS解析。

现在,当我修改表单时,我希望根据表单中的修改更新JSON对象。 问题是我事先并不知道表单是什么样的,但我知道在JSON对象中哪些字段需要更新。

我真的不知道最好的方法是什么。 我知道每次发生变化时我都可以重建JSON对象,但这似乎是一个糟糕的想法和繁琐的过程。

有没有一种简单的方法将每个JSON对象字段映射到KnockoutJS中的表单项?

这是我目前正在做的JSFiddle: http : //goo.gl/ZBaV7

更新:

我意识到这一行很有意思:

 

我通过($ data.value)直接从数组中访问该值。 是否有一种方法在html中说要敲除绑定到数组中的这个特定属性。 我知道如果数组会被重新排序,一切都会搞砸,但是因为我知道唯一可以改变的是这个属性我准备承担这个风险吗?

换句话说,有没有办法手动说出当这个值改变以在数组中改变它时如

 data-bind="onChange: $data.value = this.value" 

有没有一种简单的方法将每个JSON对象字段映射到KnockoutJS中的表单项?

是的,如果我理解你想要做的正确。 截至目前,视图模型中的值不是可观察的,并且在表单值更改时不会自动更新。 有一个插件来处理这个映射。

http://knockoutjs.com/documentation/plugins-mapping.html

示例:使用ko.mapping

要通过映射插件创建视图模型,请使用ko.mapping.fromJS函数替换上面代码中viewModel的创建:

var viewModel = ko.mapping.fromJS(data);

这会自动为数据上的每个属性创建可观察的属性。 然后,每次从服务器接收新数据时,您可以通过再次调用ko.mapping.fromJS函数一步更新viewModel上的所有属性:

ko.mapping.fromJS(data, viewModel);

希望这会有所帮助。

如果您的Knockout ViewModel与您的表单匹配,您可以使用内置的ks.toJSON()

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

一个更好的选择,特别是如果您的表单很大或很复杂,是使用mappingviewmodel插件

http://knockoutjs.com/documentation/plugins-mapping.html http://coderenaissance.github.io/knockout.viewmodel/

将json模型转换为可用的挖空模型的最简单方法是使用映射插件。

或者,您可以手动将json模型中的字段复制到视图模型的ko.observable成员中,这样可以提供更多控制,并允许您选择跳过只读属性。