これを達成するための「きれいな」方法はありませんが、より適切なものが見つかるまでは一時的な回避策があります。
undefined
またはnull
にTimeField
のminValue
とmaxValue
を設定してみてください、そして、あなたのTimeFieldに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()
を呼び出すことにより、これについて行くことができない。
// 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の設定)、またはオーバーライドでメソッドを追加することであろう。そうすれば、どこでも「私的な」generateStore()
への呼び出しを避けることができます。
単に
を使用することができます** @ McStretch:**あなたの提案は間違いなく2つの良いアプローチでしょうが、彼らは両方の着信パラメータをチェックしていなかった私はなぜだろう'setMinValue'と' setMaxValue'を使って 'null'か' undefined'かそれに類するものがあるかどうかを確認し、それに応じて動作します。しかし、あなたの精巧な答えに感謝します! – Chau
@チャウ:そうですね、それはちょうど彼らの見落としであったと思います。開発者は、コンポーネントの作成後に最小/最大をリセットするのが奇妙なユースケースであると思ったのかもしれません。 – McStretch
** @McStretch **: 'TimeField'を*拡張する代わりに' resetMinValue'と 'resetMaxValue'を' TimeField'のプロトタイプに追加する*と同様の、もっと良い方法がありますか?私の推論は、リセット方法が便利ではなく、少なくとも無関係ではないケースを見ることができないということです。 – Chau