Cha*_*hau 4 extjs reset timefield
我有一个ExtJS TimeField,我使用setMinValue(...)和setMaxValue(...)只向用户显示有效的时间元素.这工作得很好,但是如何重置minValue,maxValue以便用户可以再次看到所有时间元素?
我不想清除该字段,只是再次显示商店中的所有元素.
我没有看到任何"干净"的方法来实现这一点,但我确实有一个临时的解决方法,直到你找到更合适的东西.
尝试设置TimeField的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);
},
Run Code Online (Sandbox Code Playgroud)
是的,它是一个私有方法,所以通常你不应该使用它,但是如果你只是重置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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
更简洁的方法是扩展TimeField和添加一个resetMinAndMax完成上述操作的方法(将minValue/maxValue设置为null,调用生成存储),或者在覆盖中添加方法.这样你就可以避免在generateStore()任何地方拨打"私人"电话.
| 归档时间: |
|
| 查看次数: |
9741 次 |
| 最近记录: |