2011-11-14 10 views
8

テキストフィールド用のリモートバリデータが必要です。私のPHPは真偽値を返します。私はこのような何かを試してみた:Extjs4 - リモート検証

{ 
    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リクエストがasynchonousで、バリデータがエラーを「の値が定義されていない」を与えるということです。コールバックはありますか?だから私はデフォルトでfalseを返し、ajax呼び出しが完了すると、テキストフィールドを有効にします。

私はextjsリモート検証のためにgoogleしようとしましたが、あまり詳しくはありません。

誰かに助言や提案がありますか?ありがとう。

答えて

11

バリデータを使用してテキストフィールドの変更時にリスナーを追加し、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; 
      }        
      } 
     }); 
     }  
    } 
} 

Iの避難所; tはそれを試してみましたが、あなたのaproach私はバリデータが含まれるように、コードにいくつかの変更を加えました

EDITのために働く可能性があり..

+1

ありがとうございます。これは、テキストフィールドに入力するときにのみ機能します。テキストフィールドがフォーカスを失うと、テキストフィールドは常に有効とマークされます。私はこれがフォーム送信のためのform.isValid()も解決しないと思います。 – gotroch

+0

私の返信を編集しました – nscrob

+2

ありがとうnscrob!あなたのおかげで幸せになれた! – gotroch

0

{ 
 
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'sBのものですログ、 このリンクをご覧になれます: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html

関連する問題