Частичное обновление с помощью подключаемого модуля 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/

Ответы на вопрос(2)

Ваш ответ на вопрос