Частичное обновление с помощью подключаемого модуля KnockoutJS
Прямо сейчас я использую этот 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"
}
Теперь мое требование - выполнить «частичные обновления». Некоторые сценарии, когда я хотел бы сделать это:
I need to change the Data array in the second control. I need to update only one Control and not the whole Page (this is the class I'm serializing, the root in this JSON). I need to add another Control to my Page.Возможно, другим обходным путем будет воссоздание исходного объекта сko.mapping.toJS(viewModel)
, измените его, а затем повторно сопоставьте это снова ... но я верю, что вы получите что-то лучшее.
EDIT: Я пробовал с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]);
});
},
response:
{
"Fields": [
{
"Name": "emailField",
"Text": "email",
"Visible": true
},
{
"Name": "hiddenField",
"Text": "text",
"Visible": true
}
],
"Name": "form2",
"Type": "Form"
}
EDIT2: проверить это вhttp://jsfiddle.net/faloi/4FcAy/10/