Executando atualizações parciais com o plugin de mapeamento KnockoutJS

No momento, estou usando esse JSON com o plugin KO Mapping e está funcionando bem:

<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>

Agora, minha exigência é realizar "atualizações parciais". Alguns cenários quando gostaria de fazer isso:

Eu preciso alterar a matriz de dados no segundo controle.Eu preciso atualizar apenas um controle e não a página inteira (esta é a classe que eu estou serializando, a raiz neste JSON).Eu preciso adicionar outro controle à minha página.

Talvez outra solução seria recriar o objeto original comko.mapping.toJS(viewModel), altere-o e mapeie-o novamente ... mas acredito que você sairá com algo melhor.

EDITAR: Eu tentei comko.mapping.fromJS(updatedControl, viewModel.Controls()[0]) mas não funcionou, aqui está o meu código:

<code>function (control) {
    $.getJSON($.format('api/control/{0}/{1}', viewModel.Name(), control.Name()), function (response) {
        ko.mapping.fromJS(response, viewModel.Controls()[0]);
    });
},
</code>

resposta:

<code>{
  "Fields": [
    {
      "Name": "emailField", 
      "Text": "email", 
      "Visible": true
    }, 
    {
      "Name": "hiddenField", 
      "Text": "text", 
      "Visible": true
    }
  ], 
  "Name": "form2", 
  "Type": "Form"
}
</code>

EDIT2: confira emhttp://jsfiddle.net/faloi/4FcAy/10/

questionAnswers(2)

yourAnswerToTheQuestion