0

私は Breezejs を使用しています。dummyいくつかのデータで満たされた観察可能なエンティティがあるとしましょう。ユーザーdescriptionは、html ページの入力ボックスを介してこのエンティティのプロパティを変更しました。ユーザーがページ上の他の入力ボックスでこのエンティティの他のプロパティも変更した可能性があります。私のエンティティのentityStateはModified現時点です。次に、いくつかのチェックを実行し、コードによってこのdescriptionプロパティの変更のみを元に戻す必要があります。

これが唯一の変更である場合、entityState を次のようにしたいと考えています。Unchanged

このエンティティに他の変更がある場合は、それらをそのままにして、プロパティのみを元に戻したいと思いdescriptionます。

なぜそれが必要なのですか?ページに保留中の変更がある場合は、 ボタンSaveCancelボタンを表示します。変更が 1 つしかなく、それを元に戻す場合、これはロジックではなくSaveCancelボタンを有効にします。

出来ますか?

ありがとう。


アップデート

これが私の実際の実装です:

private tryReject() {
    // if any modified values are the same as original values >> reject
    var rejectPossible = true;
    for (var name in this.dummy().entityAspect.originalValues) {
        var oldVal = this.dummy().entityAspect.originalValues[name];
        var newVal = this.dummy()[name]();
        if (oldVal != newVal) rejectPossible = false;
    }
    if (rejectPossible) this.dummy().entityAspect.rejectChanges();
}

たぶん、賢いまたはよりクリーンな方法がありますか?

4

1 に答える 1

2

Breeze のすべてのエンティティには、「originalValues」マップを持つ「entityAspect」プロパティがあります。したがって、任意のエンティティについて、originalValues マップを確認して、1 つのプロパティまたはすべてのプロパティを元に戻すことができます。このようなもの(未テスト)。

var originalValues = myEntity.entityAspect.originalValues;
if (originalValues.hasOwnProperty("description") {
    if (Object.keys(originalValues).length === 1) {
      // this is the only change - so just reject everything - state will become "Unchanged" as a result.
      myEntity.entityAspect.rejectChanges();
    } else {
      // else just reverse this single property
      myEntity.setProperty("description", originalValues["description"]);
    }
}

お役に立てれば!

于 2013-10-29T17:06:05.303 に答える