9

dirtyフォームの状態を に変更するにはfalse?

setDirty(false)の方法のようなものはありExt.Form.Panelますか?

更新:

私の仕事はForm、フォームに変更がある場合にのみ、ドッキングされた SAVE ボタンを有効にするためのダーティ状態を追跡することです。

私はdirtychangeイベントを追跡しています:

init: function() {
    this.control({
        'form': {
            dirtychange: function(form) {
                alert('change');      
            }
        }
    });
}

しかし、loadRecord()メソッドを介してフォームにレコードをロードすると、レコードのchageロード中にアラートが表示され、レコードがロードされた後にフォームがダーティになります。

dirtyレコードの読み込み直後にフォームの状態をリセットdirtychangeし、レコードが入力されたフォームでイベントの追跡を開始したいと思います。

何か案は?

4

3 に答える 3

16

修正

値が設定されたときに元の値を変更するプロパティが利用可能です。

trackResetOnLoad: 真

このJSFiddleを参照してください

以下の古い回答は不便かもしれませんが、そのままにしておきます

まず、そのような方法は見つからないと言わざるを得ません

これは、フォームにはそのような状態がなく、フィールドにはあるためです。フォームが行うことはすべて、各フィールドを繰り返し処理し、ダーティかどうかを確認することです。いずれかのフィールドがダーティである場合、この値 (ダーティ マーク) が最後のチェック以降に変更されているかどうかがチェックされ、変更されている場合はdirtychangeイベントが発生します。次に、これは最後のチェックとして保存されます ( wasDirty)

次に、実際にトリガーするフィールドを見てみましょう。

彼らはチェックonChangeonResetており、フィールドが汚れているかどうかをチェックして、設定された値が!me.isEqual(me.getValue(), me.originalValue)どこにあるかをチェックしています。originalValueinitValue

フォームを「ダーティ」にならないように「設定」するにはどうすればよいですか

getFields()onを使用してフォームのすべてのフィールドを反復処理し、各フィールドをExt.form.Basic呼び出して現在の値を元の値に設定します (リセットはこの値にリセットされます) initValue。それだけです。

間違ったコードが削除されました

編集

さて、最後のコードを上記から次のように変更しました

var items = form.getForm().getFields().items,
      i = 0,
      len = items.length;
  for(; i < len; i++) {
    var c = items[i];
    if(c.mixins && c.mixins.field && typeof c.mixins.field['initValue'] == 'function') {
      c.mixins.field.initValue.apply(c);
      c.wasDirty = false;
    }
}

そして実用的な例をフォークしました。ボタンは、変更が検出されるまで非アクティブのままになり、変更を削除すると再び非アクティブに設定されます。それをいじってみてください。これがあなたが探しているものだと思います。

于 2013-01-16T12:35:45.927 に答える
1

方法がありreset()ます。引数なしで使用すると、 でロードされたフォーム データが保持されloadRecord()ます。

そのため、データを読み込んだ後に呼び出すとreset()、フォームはもう汚れていません。

myForm.loadRecord(record);
myForm.reset();

dirtychangeデータの読み込みでもイベントが呼び出されると思いますが、その後はreset()でフォームを確認できますisDirty()

于 2013-01-21T09:24:15.707 に答える