現在、この JSON を KO Mapping プラグインで使用していますが、問題なく動作しています。
{
"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"
}
今、私の要件は「部分的な更新」を実行することです。私がそれをしたいときのいくつかのシナリオ:
- 2 番目のコントロールの Data 配列を変更する必要があります。
- ページ全体ではなく、1 つのコントロールのみを更新する必要があります (これは、シリアル化するクラスであり、この JSON のルートです)。
- ページに別のコントロールを追加する必要があります。
おそらく別の回避策は、元のオブジェクトを で再作成しko.mapping.toJS(viewModel)
、変更してから再度マップすることです...しかし、より良いものが出てくると思います。
編集:試してみましko.mapping.fromJS(updatedControl, viewModel.Controls()[0])
たが、うまくいきませんでした。これが私のコードです:
function (control) {
$.getJSON($.format('api/control/{0}/{1}', viewModel.Name(), control.Name()), function (response) {
ko.mapping.fromJS(response, viewModel.Controls()[0]);
});
},
応答:
{
"Fields": [
{
"Name": "emailField",
"Text": "email",
"Visible": true
},
{
"Name": "hiddenField",
"Text": "text",
"Visible": true
}
],
"Name": "form2",
"Type": "Form"
}
EDIT2: http ://jsfiddle.net/faloi/4FcAy/10/でチェックしてください