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/