我有一个 ExtJS TimeField
,我使用 setMinValue(...)
和 setMaxValue(...)
只向用户显示有效的时间元素。这工作得很好,但是如何重置 minValue
和 maxValue
以便用户可以再次看到所有时间元素?
我不想清除该字段,只需再次显示商店中的所有元素。
最佳答案
我没有看到任何“干净”的方法来实现这一点,但是在您找到更合适的方法之前,我确实有一个临时的解决方法。
尝试将 TimeField
的 minValue
和 maxValue
设置为 undefined
或 null
,然后在您的 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);
},
是的,它是一个私有(private)方法,所以通常你不应该使用它,但是如果你简单地重置 minValue 或 maxValue,通常会调用该方法,所以你只是跳过一个步骤。通过将这两个属性设置为 null,
var min, max =
的声明将等于默认值。你不能通过调用 setMinValue()
或 setMaxValue()
来解决这个问题,因为它使用一个私有(private)方法,试图从你传递给方法的值中解析一个 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,调用以生成存储),或在覆盖中添加该方法。这样你就可以避免在任何地方调用“私有(private)”generateStore()
。关于Extjs: (TimeField) 重置 minValue 和 maxValue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4813842/