Extjs4 - удаленная проверка - PullRequest
8 голосов
/ 14 ноября 2011

Мне бы хотелось иметь удаленный валидатор для текстового поля.Мой PHP возвращает значение true / false.Я пробовал что-то вроде этого:

{
   xtype: 'textfield',
   fieldLabel: 'Field',
   allowBlank: false,
   validator : function(value) {
      Ext.Ajax.request({
      url: 'psc/validate',
      params: { psc: value },
      success: function(response){
       return response.responseText                             
      }
      });
   });
}

Проблема в том, что запрос ajax является асинхронным, и валидатор выдает ошибку «значения не определены».Есть ли обратный звонок?Поэтому я возвращаю false по умолчанию и делаю текстовое поле действительным, как только Ajax-вызов будет завершен.

Я пытался использовать удаленную проверку extjs в Google, но ничего особенного в этом нет.

Кто-нибудь может помочь или предложить?Благодарю.

Ответы [ 2 ]

11 голосов
/ 14 ноября 2011

возможно, вам не следует использовать валидатор, затем добавить список изменений при изменении текстового поля и использовать методы markInvalid и clearInvalid для отображения валидации.

{
   xtype: 'textfield',
   fieldLabel: 'Field',
   allowBlank: false,
   textValid: false,
   validator: function(){
       return this.textValid;
   },
   listeners : {
     'change': function(textfield,newValue,oldValue) {
        Ext.Ajax.request({
          url: 'psc/validate',
          params: { psc: value },
          scope: textfield,
          success: function(response){
             if (response.responseText){
               this.clearInvalid();
               this.textValid = true;
             } else {
               this.markInvalid('field is not valid');
               this.textValid = false;
             }                             
          }
        });
      }       
   }
}

Я не пробовал, но мог бы подойти для вашего подхода

РЕДАКТИРОВАТЬ Я сделал несколько изменений в коде, чтобы включить валидатор ..

0 голосов
/ 01 декабря 2014

{
 fieldLabel : 'Username',
 name : 'username',
 allowBlank : false,
 validFlag : true,
 validator : function() {
  return this.validFlag;
 },
 listeners : {
  'change' : function(textfield, newValue, oldValue) {
   var me = this;
   Ext.Ajax.request({
    url : 'rest/users?action=validate&username=' + newValue,
    success : function(response) {
     // Ausuming responseText is {"valid" : true}
     me.validFlag = Ext.decode(response.responseText).valid ? true : 'The username is duplicated!';
     me.validate();
    }
   });
  }
 }
}

этот HTML-код, который я тестировал (версия extjs 5.0), все в порядке, он из блога TonyTuan, Все это вы можете увидеть по этой ссылке: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html

...