ここでJsFiddleを参照してくださいhttp://jsfiddle.net/WtgbV/2/
言い換えれば、いくつかの ajax 呼び出しがあり、サーバーの応答でアイテムの配列を取得します (ノックアウト ビューモデルのアイテム)
変更をサーバーに自動的に保存するためname
に、要素でプロパティが変更されたことを知る必要があります(POSTリクエストを介して)id==2
Items
配列 内の各要素の変更を追跡する最も簡単で簡単な方法は何ですか?
ここでJsFiddleを参照してくださいhttp://jsfiddle.net/WtgbV/2/
言い換えれば、いくつかの ajax 呼び出しがあり、サーバーの応答でアイテムの配列を取得します (ノックアウト ビューモデルのアイテム)
変更をサーバーに自動的に保存するためname
に、要素でプロパティが変更されたことを知る必要があります(POSTリクエストを介して)id==2
Items
配列 内の各要素の変更を追跡する最も簡単で簡単な方法は何ですか?
Knockoutオブザーバブル(またはそれらのセット)の変更を検出するDirtyFlagというコンポーネントを共同で作成しました。NuGetまたはGitHubから取得できるKoLiteという私のライブラリから取得できます。
https://github.com/CodeSeven/KoLite
https://nuget.org/packages/KoLite
ダーティフラグ
// Your model
var Person = function () {
var self = this;
self.id = ko.observable();
self.firstName = ko.observable().extend({ required: true });
self.lastName = ko.observable().extend({ required: true });
self.dirtyFlag = new ko.DirtyFlag([self.firstName,self.lastName]);
return self;
};
これらをビューモデルにフックして、変更があったかどうかを検出します...
//Property on your view model. myPerson is an instance of Person.
//Did it Change?
isDirty = ko.computed(function () {
return myPerson().dirtyFlag().isDirty();
}),
次に、変更を再同期します...
//Resync Changes
dirtyFlag().reset();
Knockout には PubSub システムが組み込まれています (オブザーバブルやその他のコア要素で使用されます)。
各プロパティを拡張して、編集後に特定のトピックに関するイベントを公開することで、このシステムを利用できます。
次に、データの変更を追跡できるように、このトピックのサブスクリプションが必要になります。
この素晴らしい投稿を見てください
これは、独自のマッピングを提供することで簡単に実現できます。以下は、PubSub システムで何ができるかを示すための非常に基本的な例です。例を参照してください。
ヒントをあげるとすれば、プロパティごとに保存するのではなく、変更を検出し、一定期間後に配列全体を自動保存する方が良いかもしれません。
したがって、各値はトピックの「変更イベント」を発行し、トピックに関するメッセージを受信するたびにタイムアウトがリセットされます。タイムアウトの期限が切れた後、変更を BE に保存できます。