Я не вижу "чистого" способа сделать это, но у меня есть временный обходной путь, пока вы не найдете что-то более подходящее.
Попробуйте установить TimeField
s minValue
и maxValue
на undefined
или null
, а затем вызвать generateStore()
на вашем TimeField:
// 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()
везде.