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

Javascript 如何更新在表单中表示的JSON对象,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个用于创建表单的JSON对象。此JSON对象由KnockoutJS解析 现在,当我修改表单时,我希望JSON对象根据表单中的修改进行更新。问题是,我事先不知道表单会是什么样子,但我知道JSON对象中需要更新哪些字段 我真的不知道什么是最好的处理方法。我知道每次发生变化时,我都可以重建JSON对象,但这似乎是一个坏主意,也是一个乏味的过程 有没有一种简单的方法可以将每个JSON对象字段映射到KnockoutJS中的项目 以下是我目前正在做的工作: 更新: 我意识到这句话很有趣: <in

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

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

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

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

以下是我目前正在做的工作:

更新:

我意识到这句话很有趣:

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

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

更好的选择是使用
mapping
viewmodel
插件,尤其是当表单较大或复杂时


将json模型转换为可用的淘汰模型的最简单方法是使用插件

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

是否有一种简单的方法可以将每个JSON对象字段映射为表单中的项目 淘汰赛

是的,如果我知道你想正确地做什么。到目前为止,视图模型中的值是不可观察的,并且不会随着表单值的更改而自动更新。有一个插件来处理这个映射

示例:使用ko.mapping

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

var viewModel=ko.mapping.fromJS(数据)

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

ko.mapping.fromJS(数据,视图模型)


希望这会有所帮助。

拥有一个JSFIDLE总是一个不错的选择,但它不应该是您的唯一代码源。你手头没有太多的代码,所以请用这些代码更新你的帖子。(然后你不必把一行文字变成代码,只需输入fiddle链接)是的,问题是代码不是真的相关,它只是帮助你了解我想说的。我改为缩短了url。可能是@davidbuzatto的副本不太可能,因为我不想重建我的JSON对象,但我只想用knockout来更新它。您提供的问题没有使用knockoutJs。它在这里说:“每次从服务器接收新数据时,您都可以更新viewModel上的所有属性”。当我修改表单时,数组中的值是否可能被更新?更像它所说的当客户端被修改时更新的相反内容?当您使用值绑定时,如果您绑定到一个可观察属性,当表单值更改时,可观察属性的值将在视图模型中更新。你现在的问题是你没有使用可观察的。使用映射插件创建初始视图模型会将所有属性包装为ko.observable/ko.observable array,因此视图模型中的值应随着表单值的更改而更新。“每当用户编辑关联表单控件中的值时,ko都会更新视图模型上的属性。”我使用绑定转换代码,但是我没有得到所需的html表示,您需要将ko.mapping的结果分配给视图模型,然后应用绑定。
data-bind="onChange: $data.value = this.value"