0

ここでJsFiddleを参照してくださいhttp://jsfiddle.net/WtgbV/2/

言い換えれば、いくつかの ajax 呼び出しがあり、サーバーの応答でアイテムの配列を取得します (ノックアウト ビューモデルのアイテム)

変更をサーバーに自動的に保存するためnameに、要素でプロパティが変更されたことを知る必要があります(POSTリクエストを介して)id==2

Items配列 内の各要素の変更を追跡する最も簡単で簡単な方法は何ですか?

4

2 に答える 2

3

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();
于 2012-09-14T16:23:20.793 に答える
0

Knockout には PubSub システムが組み込まれています (オブザーバブルやその他のコア要素で使用されます)。

各プロパティを拡張して、編集後に特定のトピックに関するイベントを公開することで、このシステムを利用できます。

次に、データの変更を追跡できるように、このトピックのサブスクリプションが必要になります。

この素晴らしい投稿を見てください

これは、独自のマッピングを提供することで簡単に実現できます。以下は、PubSub システムで何ができるかを示すための非常に基本的な例です。例を参照してください

ヒントをあげるとすれば、プロパティごとに保存するのではなく、変更を検出し、一定期間後に配列全体を自動保存する方が良いかもしれません。

したがって、各値はトピックの「変更イベント」を発行し、トピックに関するメッセージを受信するたびにタイムアウトがリセットされます。タイムアウトの期限が切れた後、変更を BE に保存できます。

于 2012-09-14T11:13:26.757 に答える