2010-12-07 4 views
4

У меня есть эта форма в ExtJs. Если поле1 не пустое, поле2 не должно быть пустым. Но он не работает, даже если слушатель стреляет.Вопрос проверки формы ExtJs

{ 
xtype : 'panel', 
title : 'title 1', 
items : [{ 
    xtype : 'fieldset', 
    title : 'field A', 
    items : [{ 
     xtype : 'textfield', 
     fieldLabel : 'Line 1', 
     id : 'field1', 
     listeners: { 
      change: function(f, new_val) { 
      if (new_val) { 
       //alert("change" + new_val); 
       f.field2.allowBlank = false; 
      } else { 
       f.field1.allowBlank = true; 
      } 
     } 
    }, 
      code for field2 
      ] 
} 

ответ

5

Частичный ответ:

Причина ваш код не работает, потому что allowBlank это значение конфигурации - это влияет только на время создания компонента. Я вижу эту ошибку все время - при просмотре документов API вы должны иметь в виду, что все эти параметры конфигурации являются только мощными при создании объекта - это не общедоступные свойства, которые вы можете установить для изменения поведения существующего объекта ,

Это, я удивлен, что в API нет метода setAllowBlank(). Я продолжу оглядываться и исправлять этот ответ, если я смогу найти способ сделать это.

EDIT: Похоже, ваш метод должны работы, от моего чтения исходного кода TextField. Поэтому вопрос в том, почему не так.

EDIT2: Вероятно, вы не можете получить ссылку на свои текстовые поля. f.field1, вероятно, не указывает на то, что вы думаете. Вы можете решить эту проблему, добавив ref:'field1' в конфигурацию TextField. Тогда ваша FormPanel будет иметь свойство, называемое полем1, которое вы можете ссылаться.

+0

Я согласен, что allowBlank - это значение конфигурации, и оно должно использоваться как таковое, но вы все равно можете использовать его, как если бы оно было свойством. Я сделал это в своем предыдущем проекте, и я смог получить желаемую функциональность, описанную OP. Теперь мне просто нужно подождать, пока я вернусь домой, чтобы вспомнить, как это сделать: P. Не поймите меня неправильно, хотя код определенно был kludge. – McStretch 2010-12-07 18:50:30

2

Вы можете использовать функцию markInvalid. Например:

if (new_val) { 
    if(f.field2.getValue() == ''){ 
     f.field2.markInvalid('Cannot be empty'); 
    } 
} else { 
    // clears invalid flags on the field. 
    f.field1.clearInvalid(); 
} 

Не говорю, что это точный код для использования, но вы можете видеть это, как отметить недопустимые и ясно недействительные сообщения. Существует также возможность создания собственных валидаторов, хотя я не уверен, что это полностью соответствует вашим потребностям.

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