2013-08-20 3 views
0

Я просто работал над сценарием ExtJS и у меня есть ComboBox, который имеетпроверки ExtJS ComboBox возвращает неожиданный результат

allowBlank = false 

и

forceSelection = true 

У меня есть элемент списка, который действует как сообщение по умолчанию, который имеет отображаемый текст

Please select... 

и никакой ценности

'' 

При запуске проверки на ComboBox я получаю истинную не знаю, почему? Согласно документации при

allowBlank = false 

проверка вынужден проверить value.length> 0 Так что я сделал свой собственный тест в JS консоли

>> if (thisForm.controlManager.controlArray[2].allowBlanks) { if (thisForm.controlManager.controlArray[2].length >= 0) { true; } false; } else { if (thisForm.controlManager.controlArray[2].length > 0) { true; } false; } 

и он вернулся ложные Так что я думал, что это может быть ошибка в методе проверки, поэтому я попытался сделать это

>> thisForm.controlManager.controlArray[2].validateValue('') 

и получил это в результате истинного

Любой один есть какой-либо идеи, что я мог бы делать неправильно или если что-то еще нужно, чтобы получить набор этот Validate вернуться ложным, если значение «».

PS. Я также попытался это

>> thisForm.controlManager.controlArray[2].validateValue(' ') 

и получили правильный результат, который ложным. Это меня очень смутило, так как обычно я ожидаю, что '' и '' вернут то же значение в валидации.

Я знаю, что обходным путем было бы установить значение «', но я предпочел бы работать с ним».

Благодаря

ответ

1

Вы должны использовать конфигурацию emptyText Ext этот код для VALIDATE полей:

validate : function(){ 
    if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){ 
     this.clearInvalid(); 
     return true; 
    } 
    return false; 
} 

и getRawValue определяется следующим образом:

getRawValue : function(){ 
    var v = this.rendered ? this.el.getValue() : Ext.value(this.value, ''); 
    if(v === this.emptyText){ 
     v = ''; 
    } 
    return v; 
} 

так, если значение равно пустому тексту, возвращаемое значение равно ''

+0

Спасибо о том, что дал мне понимание того, что происходит под капотом. Я переопределил функцию isValid, чтобы использовать this.getValue() вместо this.getRawValue(), поскольку этот метод получает отображаемый текст вместо значения. Довольно странно. Я также переопределить метод validateValue сделать следующее: 'если (a.preventMark!) { \t если (с) \t { \t \t если (a.allowBlanks) \t \t { \t \t \t а. clearInvalid(); \t \t} \t \t еще \t \t { \t \t \t, если (b.length> 0) \t \t \t { \t \t \t \t a.clearInvalid(); \t \t \t} \t \t \t еще \t \t \t { \t \t \t \t d = "Вы должны выбрать правильное значение!"; \t \t \t \t a.markInvalid (d); \t \t \t \t c = false; \t \t \t} \t \t}} \t \t еще \t { \t \t a.markInvalid (д); \t} \t \t возвращение c; } ' –

+0

получил еще лучший способ для всех заинтересованных, переопределить isValid, чтобы использовать getValue вместо getRawValue, а затем переопределить getErrors, поскольку это ничего не делает по умолчанию, поэтому, изменяя это, нет необходимости изменять validateValue :) Много более чистых и более подходящих подход! –

2

Я просто так решил закончить борьбу с этой же проблемой, и после некоторого осмотра нашел решение, которое не требует переопределения стандартных функций Extjs.

В принципе, существует опция конфигурации «validator» для потомков Ext.form.field.Текст, который позволяет программистам указать пользовательскую функцию проверки для компонента (см. here).

В принципе, ваша функция валидатора вызывается в начале getErrors() и оценивается перед остальной частью стандартной проверки поля. Функция validator принимает один аргумент (значение) и должна возвращать либо true, если значение является допустимым, либо строкой сообщения об ошибке, если это не так.

Следующая конфигурация в конечном итоге работает для моего случая:

validator: function (value) { 
    return (value === '/*Your emptytext text*/') ? "blankText" : true; 
} 
+0

Приятно спасибо за обновление :) –

Смежные вопросы