とTimeField
を使用して有効な時間要素のみをユーザーに表示するExtJSがあります。これは問題なく機能しますが、ユーザーがすべての時間要素を再び表示できるように、をリセットするにはどうすればよいですか?setMinValue(...)
setMaxValue(...)
minValue
maxValue
フィールドをクリアしたくありません。ストアのすべての要素をもう一度表示します。
これを達成するための「クリーンな」方法はわかりませんが、より適切なものが見つかるまで一時的な回避策があります。
TimeField
'sminValue
とmaxValue
toundefined
またはを設定してから、TimeFieldnull
を呼び出しgenerateStore()
てみてください。
// private
generateStore: function(initial){
var min = this.minValue || new Date(this.initDate).clearTime(),
max = this.maxValue || new Date(this.initDate).clearTime().add('mi',
(24 * 60) - 1),
times = [];
while(min <= max){
times.push(min.dateFormat(this.format));
min = min.add('mi', this.increment);
}
this.bindStore(times, initial);
},
はい、これはプライベートメソッドなので、通常は使用しないでください。ただし、minValueまたはmaxValueをリセットするだけでメソッドが呼び出されるので、手順をスキップするだけです。両方のプロパティをnullに設定すると、の宣言var min, max =
はデフォルトと同じになります。これを呼び出すことによって、setMinValue()
またはsetMaxValue()
メソッドに渡した値からDateを解析しようとするプライベートメソッドを使用するためにこれを行うことはできません(nullの解析に失敗します):
// private
setLimit: function(value, isMin, initial){
var d;
// will fail here
if(Ext.isString(value)){
d = this.parseDate(value);
// will fail as well
}else if(Ext.isDate(value)){
d = value;
}
// will never make it here, because 'd' wasn't set above
if(d){
var val = new Date(this.initDate).clearTime();
val.setHours(d.getHours(), d.getMinutes(), d.getSeconds(),
d.getMilliseconds());
this[isMin ? 'minValue' : 'maxValue'] = val;
if(!initial){
this.generateStore();
}
}
}
アップデート:
よりクリーンなアプローチは、上記を実現TimeField
するメソッドを拡張して追加するresetMinAndMax
か(minValue / maxValueをnullに設定するか、ストアを生成するために呼び出す)、またはオーバーライドでメソッドを追加することです。generateStore()
そうすれば、どこでも「プライベート」に電話をかけることを避けることができます。
簡単に使用できます
this.setMinValue(false);
幸運を
extjsはコンポーネントからプロパティ「value」をリセットするだけです(私が間違っていない場合)、まあ、私のコードがより良い方法かどうかはわかりませんが、上記の答えのように、私はからのリセットメソッドをオーバーライドしますFieldクラスのコードを使用してDateFieldクラスを作成し、元の値(originalMinValueおよびoriginalMaxValue)を保持するためにさらに2つのプロパティを追加します。
originalMinValueとoriginalMaxValueは、日付フィールドのRenderイベントで開始されます。
this.setValue = this.setValue.createSequence(this.updateHidden);
this.originalMinValue = this.minValue;
this.originalMaxValue = this.maxValue;
// this is part of me onRender event code
それがオーバーライドです
Ext.override(Ext.form.DateField,{
originalMinValue : null,
originalMaxValue : null,
reset : function() {
this.setValue(this.originalValue);
this.setMinValue(this.originalMinValue);
this.setMaxValue(this.originalMaxValue);
this.clearInvalid();
}
})
このようにして、コンポーネントのリセットメソッドe thenを使用して、value、minValue、およびMaxValueを元のValueに戻すことができます。
私の悪い英語でごめんなさい。
ページが読み込まれるときのタイムフィールドの初期値を超えていますか?その場合は、FIELDクラスのreset()メソッドを使用できるはずです。タイムフィールドコンポーネントはFIELDから拡張されているため、これにアクセスできるはずです。