4

我有一个 ExtJS TimeField,我在其中使用setMinValue(...)andsetMaxValue(...)只向用户显示有效的时间元素。这工作得很好,但是我如何重置minValueandmaxValue以便用户可以再次看到所有时间元素?

我不想清除该字段,只需再次显示商店中的所有元素。

4

4 回答 4

5

我没有看到任何“干净”的方法来实现这一点,但我确实有一个临时的解决方法,直到你找到更合适的方法。

尝试设置TimeField'sminValuemaxValueto undefinedor 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,for 的声明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()到处打电话给“私人”。

于 2011-01-27T12:14:22.563 回答
3

你可以简单地使用

this.setMinValue(false);

祝你好运

于 2014-08-07T13:56:19.713 回答
1

extjs 仅从组件重置属性“值”(如果我没记错的话),好吧,我不知道我的代码是否是更好的方法,但是..就像上面的答案一样,我从DateField 类使用 Field 类的代码并添加另外 2 个属性以保留原始值(originalMinValue 和 originalMaxValue)。

originalMinValue 和 originalMaxValue 是在我的日期字段的 onRender 事件中启动的。

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();        
}

})

这样,我们就可以使用组件的reset方法e then,value,minValue,MaxValue回到originalValue。

对不起,我的英语不好。

于 2011-08-18T19:32:11.727 回答
0

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

于 2011-01-27T15:49:14.023 回答