Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs:(TimeField)重置最小值和最大值_Extjs_Reset_Timefield - Fatal编程技术网

Extjs:(TimeField)重置最小值和最大值

Extjs:(TimeField)重置最小值和最大值,extjs,reset,timefield,Extjs,Reset,Timefield,我有一个ExtJSTimeField,其中我使用setMinValue(…)和setMaxValue(…)只向用户显示有效的时间元素。这很好,但是如何重置minValue和maxValue以便用户可以再次看到所有时间元素 我不想清除字段,只需再次显示存储区中的所有元素。我看不到任何“干净”的方法来完成此操作,但在您找到更合适的内容之前,我有一个临时解决方法 尝试将TimeField的minValue和maxValue设置为undefined或null,然后在时间字段上调用generateStor

我有一个ExtJS
TimeField
,其中我使用
setMinValue(…)
setMaxValue(…)
只向用户显示有效的时间元素。这很好,但是如何重置
minValue
maxValue
以便用户可以再次看到所有时间元素

我不想清除字段,只需再次显示存储区中的所有元素。

我看不到任何“干净”的方法来完成此操作,但在您找到更合适的内容之前,我有一个临时解决方法

尝试将
TimeField
minValue
maxValue
设置为
undefined
null
,然后在时间字段上调用
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);
    },

更新:


一种更简洁的方法是扩展
TimeField
并添加一个
resetMinAndMax
方法来完成上述操作(将minValue/maxValue设置为null,调用以生成存储),或者在覆盖中添加该方法。这样可以避免在任何地方调用“private”
generateStore()

加载页面时是否在时间字段的初始值之后?如果是这种情况,您应该能够使用FIELD类的reset()方法。您应该可以访问它,因为timefield组件是从FIELD扩展而来的。

extjs只重置组件的属性“value”(如果我没有错的话),我不知道我的代码是否是更好的方法,但是..就像上面的答案一样,我使用Field类的代码覆盖了DateField类的reset方法,并添加了另外两个属性以保持原始值(originalMinValue和originalmMaxValue)

originalMinValue和originalmMaxValue从my Date字段的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,然后将value、minValue和MaxValue返回到原始值

对不起,我的英语不好。

你可以简单地使用

this.setMinValue(false);

祝你好运

@McStretch:你的建议肯定是两个好方法,但我想知道为什么他们不检查
setMinValue
setMaxValue
的传入参数,看看它是否包含
null
未定义的
或类似的内容,然后采取相应的行动。但是非常感谢你详尽的回答@周:是的,我想这只是他们的疏忽。也许开发人员认为在构建组件后重置最小/最大值会是一个奇怪的用例。@McStretch:与其扩展
时间域
,不如在
时间域
的原型中添加
重置最小值
重置最大值
?我的理由是,我看不到重置方法不方便或至少不相关的情况。@Chau:听起来是个好主意。可以使用Ext.override()添加这些方法:将函数列表添加到现有类的原型中,覆盖具有相同名称的任何现有方法。在我以前的项目中,我们有一个文件,其中保存了所有重写,这样我们就可以轻松地检查是否有人修改了Ext类的原型。
this.setMinValue(false);