Частичное обновление с помощью подключаемого модуля KnockoutJS
Прямо сейчас я использую этот JSON с плагином KO Mapping, и он работает нормально:
<code>{ "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" } </code>
Теперь мое требование - выполнить «частичные обновления». Некоторые сценарии, когда я хотел бы сделать это:
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])
но это не сработало, вот мой код:
<code>function (control) { $.getJSON($.format('api/control/{0}/{1}', viewModel.Name(), control.Name()), function (response) { ko.mapping.fromJS(response, viewModel.Controls()[0]); }); }, </code>
response:
<code>{ "Fields": [ { "Name": "emailField", "Text": "email", "Visible": true }, { "Name": "hiddenField", "Text": "text", "Visible": true } ], "Name": "form2", "Type": "Form" } </code>
EDIT2: проверить это вhttp://jsfiddle.net/faloi/4FcAy/10/