Wykonywanie częściowych aktualizacji za pomocą wtyczki mapującej KnockoutJS

W tej chwili używam tego JSON z wtyczką mapowania KO i działa dobrze:

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

Teraz moim wymaganiem jest wykonanie „częściowych aktualizacji”. Niektóre scenariusze, kiedy chciałbym to zrobić:

Muszę zmienić tablicę danych w drugiej kontrolce.Muszę zaktualizować tylko jedną kontrolkę, a nie całą stronę (jest to klasa, którą serializuję, root w tym JSON).Muszę dodać kolejną kontrolkę do mojej strony.

Być może innym obejściem byłoby odtworzenie oryginalnego obiektu za pomocąko.mapping.toJS(viewModel), zmień go i ponownie mapuj ponownie ... ale wierzę, że wyjdziesz z czymś lepszym.

EDYTOWAĆ: Próbowałem zko.mapping.fromJS(updatedControl, viewModel.Controls()[0]) ale to nie zadziałało, oto mój kod:

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

odpowiedź:

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

EDIT2: sprawdź to whttp://jsfiddle.net/faloi/4FcAy/10/

questionAnswers(2)

yourAnswerToTheQuestion