Extjs: (TimeField) сбросить minValue и maxValue

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

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

4 ответа

Решение

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

Попробуйте установить 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 в ноль, вызовите, чтобы создать хранилище), или добавьте метод в переопределении. Таким образом, вы можете избежать звонков в "приват" generateStore() везде.

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

this.setMinValue(false);

удачи

Extjs только сбрасывает свойство "value" из компонента (если я не ошибаюсь), ну, я не знаю, является ли мой код лучшим способом, но.. как и в предыдущем ответе, я переопределил метод reset из Класс 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();        
}

})

таким образом, мы можем использовать метод сброса компонента e затем, value, minValue и MaxValue, возвращаясь к исходному значению.

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

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

Другие вопросы по тегам