TextFieldのchange
イベントにリスナーを追加しました。ユーザーがテキストフィールドの値を変更すると、リスナーがコントロールを取得します。これは素晴らしい。Ext JSのテキストフィールドのプログラム編集ではなく、ユーザーの編集をリッスンする方法は?
リスナーで古い値を復元したい場合もあります。しかし、リスナーでsetValue
メソッドを呼び出すと、change
イベントが再び発生します。イベントの再開なしにプログラムによって古い値を復元する最善の方法は何ですか?
TextFieldのchange
イベントにリスナーを追加しました。ユーザーがテキストフィールドの値を変更すると、リスナーがコントロールを取得します。これは素晴らしい。Ext JSのテキストフィールドのプログラム編集ではなく、ユーザーの編集をリッスンする方法は?
リスナーで古い値を復元したい場合もあります。しかし、リスナーでsetValue
メソッドを呼び出すと、change
イベントが再び発生します。イベントの再開なしにプログラムによって古い値を復元する最善の方法は何ですか?
あなたがプログラム的に値を変更することを示すTextField
にフラグを設定することができます。例:
new Ext.form.TextField({
renderTo: 'container',
listeners: {
change: function(sender, newValue, oldValue) {
if (this.restoringValue) {
return;
}
if (newValue == 'XXX') {
this.restoringValue = true;
this.setValue(oldValue);
delete this.restoringValue;
}
}
},
value: 'XXX'
});
変更リスナーにバッファや遅延がない場合は、動作するはずです。
イベントハンドラを編集して、関数のcaller
を確認します。それに基づいて、イベントハンドラから脱落します。
setRawValue(Object値):オブジェクト
値変換、変化検出、および検証をバイパスし、直接フィールドの生の値を設定し。 http://docs.sencha.com/ext-js/4-0/#!/api/Ext.form.field.Base-method-setRawValue
checkChangeイベントが検索するフィールドのプロパティであるチェック変更イベントを停止するソリューションが見つかりました。それはsetValueメソッドによって発射されたcheckChange機能は、これは、5.1で、それは以前のバージョンかどうかわからないです
checkChange: function() {
var me = this,
newVal, oldVal;
if (!me.suspendCheckChange) {
newVal = me.getValue();
oldVal = me.lastValue;
if (!me.isDestroyed && me.didValueChange(newVal, oldVal)) {
me.lastValue = newVal;
me.fireEvent('change', me, newVal, oldVal);
me.onChange(newVal, oldVal);
}
}
},
であるためである
field.suspendCheckChange =真
です。..
ユーザーがイベントハンドラを変更したためにイベントハンドラが呼び出されるかどうかフィールドを変更したりハンドラ自体がフィールドを変更しているため、「呼び出し側」は同じだと私は信じています。どちらの場合でも、 'caller'は' change'イベントのリスナーを呼び出すExt JS関数です。 – bporter
[OK]をクリックし、 "ignoreEvent"という変数を作成します。 setValueでそれを設定/クリアし、フラグが設定されていればイベントを無視します。 –
最初に 'field.suspendEvents(false);を試しました。 field.setValue(value); field.resumeEvents(); 'しかし、これは私のハンドラーが再呼び出しされるのを妨げていないようです。だから、私はフラグを使用するようにあなたの提案に行った。最初のアプローチがうまくいかなかった理由について、誰かが洞察力を持っているかどうか聞いてみたいと思います。あなたの応答のために多くの感謝、Diodeus。 – bporter