现在,我将这个 JSON 与 KO Mapping 插件一起使用,它工作正常:
{
"Controls": [
{
"Fields": [
{
"Name": "emailField",
"Text": "email",
"Visible": true
},
{
"Name": "hiddenField",
"Text": "text",
"Visible": true
}
],
"Name": "form2",
"Type": "Form"
},
{
"Data": [
[
"Federico Aloi",
20
],
[
"Andres Lopez",
31
],
[
"Pablo Perez",
32
]
],
"Fields": [
{
"Name": "nameField",
"Text": "Nombre",
"Visible": true
},
{
"Name": "ageField",
"Text": "Edad",
"Visible": true
}
],
"Name": "datagrid1",
"Type": "Datagrid"
}
],
"Name": "pagina1",
"Title": "Probando el KO"
}
现在我的要求是执行“部分更新”。我想这样做的一些场景:
- 我需要更改第二个控件中的 Data 数组。
- 我只需要更新一个控件而不是整个页面(这是我正在序列化的类,这个 JSON 中的根)。
- 我需要向我的页面添加另一个控件。
也许另一种解决方法是用 重新创建原始对象ko.mapping.toJS(viewModel)
,对其进行更改然后重新映射它......但我相信你会得到更好的东西。
编辑:我试过ko.mapping.fromJS(updatedControl, viewModel.Controls()[0])
但没有用,这是我的代码:
function (control) {
$.getJSON($.format('api/control/{0}/{1}', viewModel.Name(), control.Name()), function (response) {
ko.mapping.fromJS(response, viewModel.Controls()[0]);
});
},
回复:
{
"Fields": [
{
"Name": "emailField",
"Text": "email",
"Visible": true
},
{
"Name": "hiddenField",
"Text": "text",
"Visible": true
}
],
"Name": "form2",
"Type": "Form"
}
EDIT2: check it out at http://jsfiddle.net/faloi/4FcAy/10/