Extjs: (TimeField) сбросить minValue и maxValue - PullRequest
4 голосов
/ 27 января 2011

У меня есть ExtJS TimeField, где я использую setMinValue(...) и setMaxValue(...), чтобы показывать пользователю только действительные элементы времени.Это прекрасно работает, но как мне сбросить minValue и maxValue, чтобы пользователь снова мог видеть все элементы времени?

Я не хочу очищать поле, просто показать всеэлементы из магазина снова.

Ответы [ 4 ]

5 голосов
/ 27 января 2011

Я не вижу "чистого" способа сделать это, но у меня есть временный обходной путь, пока вы не найдете что-то более подходящее.

Попробуйте установить 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() везде.

3 голосов
/ 07 августа 2014

Вы можете использовать просто

this.setMinValue(false);

удачи

1 голос
/ 18 августа 2011

Extjs только сбрасывает свойство "value" из компонента (если я не ошибаюсь), ну, я не знаю, является ли мой код лучшим способом, но .. как и в ответе выше, я переопределил сбросьте метод из класса DateField, используя код класса Field, и добавьте еще 2 свойства, чтобы сохранить исходные значения (originalMinValue и originalMaxValue).

originalMinValue и originalMaxValue запускаются в событии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, возвращаясь к исходному значению.

извините за мой плохой английский.

0 голосов
/ 27 января 2011

Вы после начальных значений для временного поля, когда страница загружается?Если это так, вы должны иметь возможность использовать метод reset () класса FIELD.Вы должны иметь доступ к этому, так как компонент поля времени расширен от FIELD.

...