如何更新表单中表示的JSON对象
How to update a JSON Object that is represented in a form
我有一个用于创建表单的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()
mapping
或viewmodel
插件
,特别是如果您的表单很大或很复杂的话。http://knockoutjs.com/documentation/plugins-mapping.htmlhttp://coderenaissance.github.io/knockout.viewmodel/
将json模型转换为可用的knockout模型的最简单方法是使用mapping插件。
或者,您可以手动将json模型中的字段复制到视图模型的ko.observable
成员中,这给了您更多的控制,并允许您选择跳过只读属性。
- 将JSON对象的表示形式更改为显式键/值格式
- 在Javascript中,如何在JSON对象中将1.00表示为数字
- 为什么我可以't使用点表示法访问JSON字典元素
- 可以't访问JSON中的特定字段,在javascript中表示未定义
- 在 JSON/Javascript 中表示一天中的时间的首选方法
- 将点表示法转换为 JSON
- 使用来自 JSON 对象的数组表示法进行多级属性检索
- 以 JSON 日期表示的时区
- 原型函数和 json 表示法函数之间的区别
- 如何在javascript中将json objectId转换为其字符串表示
- 在用类似JSON的表示法声明的javascript变量中是否允许注释
- 什么是使用 JSON 表示命令行参数的好方法
- 如何从字符串中获取值,并在javascript中将其表示为json对象
- 在 python 中将具有多种类型的元组表示为 JSON
- 需要conevrt-json数组来表示angularjs应用程序中的时钟时序
- JavaScript对象表示法是正确的JSON吗
- 如何将可为null的json对象表示为单个字符串
- 如何在jquery ajax请求的data参数中表示json数组?
- 如何更新表单中表示的JSON对象
- Node.js表示json的返回类型