Teilaktualisierungen mit dem KnockoutJS-Mapping-Plugin durchführen

Im Moment benutze ich diesen JSON mit dem KO-Mapping-Plugin und er funktioniert einwandfrei:

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

Jetzt muss ich "Teilaktualisierungen" durchführen. Einige Szenarien, in denen ich das machen möchte:

Ich muss das Datenarray im zweiten Steuerelement ändern.Ich muss nur ein Steuerelement und nicht die gesamte Seite aktualisieren (dies ist die Klasse, die ich serialisiere, der Stamm in diesem JSON).Ich muss meiner Seite ein weiteres Steuerelement hinzufügen.

Möglicherweise besteht eine andere Problemumgehung darin, das ursprüngliche Objekt mit wiederherzustellenko.mapping.toJS(viewModel), ändere es und ordne es dann erneut zu ... aber ich glaube, dass du etwas Besseres herausbringen wirst.

BEARBEITEN: Ich habe es mit versuchtko.mapping.fromJS(updatedControl, viewModel.Controls()[0]) aber es hat nicht funktioniert, hier ist mein Code:

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

Antwort:

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

EDIT2: schau es dir anhttp://jsfiddle.net/faloi/4FcAy/10/

Antworten auf die Frage(2)

Ihre Antwort auf die Frage