HTMLフォームでPersonオブジェクトを編集するために使用される次のビューモデルがあります。
function PersonModel(person) {
var self = this;
self.id = ko.observable(person.Id);
self.firstName = ko.observable(person.FirstName);
self.surname = ko.observable(person.Surname);
self.email = ko.observable(person.Email);
self.cell = ko.observable(person.Cell);
self.save = function (data) {
savePerson(data);
};
}
ユーザーが Person を編集したい場合、次のように、この新しいインスタンスを編集フォームにバインドします。
function editPerson(person) {
var url = "@Url.Action("EditJson", "Person")";
$.getJSON(url, function (data) {
$("#person-detail").css("display", "block");
ko.applyBindings(new PersonModel(data), $("#person-detail")[0]);
});
}
そして、フォームでは、クリック イベントをビュー モデルの save メソッドにバインドします。
<a href="#" data-bind="click: save">Update</a>
1 人の個人レコードを編集するときに複数の DB 更新が実行されるという問題が発生しました。これはapplyBindings
、同じ要素である編集ポップアップで複数回呼び出したためだと思います。これは、ApplyBindings を呼び出した回数と同じ数の DB 編集が実行されるため、ある程度確認できます。
ここで、 によって適用されたバインディングを削除するapplyBindings
方法、またはバインディングを 1 回だけ適用し、編集ごとに再作成するのではなくビュー モデルを更新する方法を知る必要があります。私は最初のアプローチをはるかに好みます。ビュー モデルは、シングルトンの特性を示すべきではありません。