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/