ViewModelのマスターソースからダイアログにいくつかのデータを複製する必要があります。その理由は、ユーザーがダイアログをキャンセルする可能性があり、キャンセルされた変更をマスターに反映させたくないためです。
マスターデータの複製コピーをダイアログに作成し、データバインディングが「localEdited。*」プロパティを取得するように設定されています。ユーザーが[OK]をクリックした場合、編集されている場合はデータをマスターに永続化して戻します。それ以外の場合は、新しいデータの場合はデータをプッシュします。
editItem: function(data) {
// clone a temporary copy for the dialog
this.localEdited = ko.mapping.fromJS(ko.toJS(data));
$("#dlgAdd").dialog("open");
},
上記は現在機能していますが、マスター内の別のアイテムをクリックすると、ダイアログに更新された値が表示されません。ko.mapping.fromJSが一度だけ機能し、その後は二度と機能しないかのようです。常に最初の値を取得します。この問題を回避するにはどうすればよいですか?値を再バインドする必要があるように感じますが、KOの全体的なポイントはこれを行う必要がないことです。
データを親に永続化するにはどうすればよいですか。私は上記と同じ問題を抱えているのではないかと思います。
ところで、私はKnockoutJS1.2.1を使用しています。