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

How to update a JSON Object that is represented in a form

本文关键字:表示 JSON 对象 表单 何更新 更新      更新时间:2023-09-26

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

现在,当我修改表单时,我希望JSON对象能够根据表单中的修改进行更新。问题是,我不知道提前的形式会是什么样子,但我知道在JSON对象哪些字段需要更新。

我真的不知道什么是最好的处理方法。我知道我可以在每次发生变化时重建JSON对象,但这似乎是一个坏主意,而且是一个乏味的过程。

是否有一个简单的方法来映射每个JSON对象字段,以形成KnockoutJS中的项目?

下面是我正在做的事情的JSFiddle:http://goo.gl/ZBaV7

更新:

我意识到这一行很有趣:

<input type="text" data-bind="value: $data.value, attr : { disabled: $data.disabled }" />

我通过($data.value)直接从数组访问值。在html中是否有一种方式说knockout绑定到数组中的这个特定属性。我知道如果数组被重新排序,一切都会变得混乱但既然我知道唯一可以改变的是这个属性我准备好冒这个险了吗?

换句话说,是否有一种方法可以手动说明,当这个值改变时,在数组中改变它,比如

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

这将自动为每个数据上的属性。然后,每次从在服务器上,您可以一步更新viewModel上的所有属性再次调用ko.mapping.fromJS函数:

ko.mapping.fromJS(data, viewModel);

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

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

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

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

将json模型转换为可用的knockout模型的最简单方法是使用mapping插件。

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