Gerade jetzt, ich bin mit dieser JSON mit der Plugin KO Mapping und es funktioniert gut:Performing partielles Updates mit KnockoutJS Mapping-Plugin
{
"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"
}
Jetzt ist meine Anforderung "partielles Updates" durchzuführen. Einige Szenarien, wenn ich das tun möchte:
- Ich muss das Data-Array in der zweiten Kontrolle ändern.
- Ich muss nur ein Steuerelement und nicht die ganze Seite aktualisieren (das ist die Klasse, die ich serialisieren, die Wurzel in diesem JSON).
- Ich muss ein anderes Steuerelement zu meiner Seite hinzufügen.
Vielleicht wäre eine andere Problemumgehung das ursprüngliche Objekt neu zu erstellen, es mit ko.mapping.toJS(viewModel)
, ändern und dann wieder re-map ... aber ich glaube, dass Sie besser mit etwas herauskommen wird.
EDIT: Ich habe versucht, mit ko.mapping.fromJS(updatedControl, viewModel.Controls()[0])
aber es hat nicht funktioniert, hier ist mein Code:
function (control) {
$.getJSON($.format('api/control/{0}/{1}', viewModel.Name(), control.Name()), function (response) {
ko.mapping.fromJS(response, viewModel.Controls()[0]);
});
},
Antwort:
{
"Fields": [
{
"Name": "emailField",
"Text": "email",
"Visible": true
},
{
"Name": "hiddenField",
"Text": "text",
"Visible": true
}
],
"Name": "form2",
"Type": "Form"
}
EDIT2: Prüfung es heraus bei http://jsfiddle.net/faloi/4FcAy/10/
Können Sie den Code in diesem jsfiddle mit Ihrem Code ersetzen: http://jsfiddle.net/JasonMore/LKS5b/ Ich wette, ich kann Ihnen helfen, sobald ich die JS Laufen zu sehen. –
@JasonMore jsfiddle hinzugefügt! – faloi