2010-09-10 5 views
1

HI, je suis en utilisant ExtJS 3.2.1 lib et iam nouveau à ExtJS,Extjs à distance problème de validation combo

I have implemented combobox with remote with filtering option in the form, i have added forceSelection(true) property to combo for validate the text with store collection and allowblank(false) to combo for enable form save button . 

Mon problème est propriété forceSelection valide le contrôle sur l'événement flou seulement et effacer le texte combo , Si l'utilisateur entre le texte invalide dans le combo, le bouton de sauvegarde est activé (puisque je suis seulement coché le allowblank (false) pour combo) dans le formulaire, et quand il appuie sur le bouton save, il est envoyé avec un texte invalide dans le combo .

J'ai également vérifié la méthode isvalid() de forme et de combo, dans l'événement save, elle retourne aussi 'true'.

Comment puis-je valider dans ce scénario particulier?

Répondre

4

potentiellement vous pourriez remplacer la fonction ValidateValue dans la zone de liste déroulante, et si forceSelection est définie sur true vérifier la valeur brute du champ contre le magasin, comme ceci:

Ext.override(Ext.form.ComboBox, { 

validateValue : function(value) { 

    var errs = this.getErrors(value); 

    if((value || value != "") && this.forceSelection){ 
     var val = this.getRawValue(), 
     rec = this.findRecord(this.displayField, val); 

     if(!rec) 
      errs.push("Invalid Selection"); 
    } 

    var error = errs[0]; 

    if (error == undefined) { 
     return true; 
    } else { 
     this.markInvalid(error); 
     return false; 
    } 
} 

});

0

Vous pouvez ajouter un écouteur d'événement pour l'événement de flou afin de valider le texte saisi par l'utilisateur.

validateCombo = new function(field) { 
    //business logic for your validation here. 
    if(field.value == foo) { 
     //then do something 
     field.isValid(true); //the true boolean disables marking the field as invalid 
    } 
    else { 
     //do something else 
     field.markInvalid('this field is invalid'); 
    } 
} 

var cb = new Ext.form.ComboBox({ 
// all of your config options 
listeners:{ 
    scope: yourScope, 
    'blur': validateCombo 
} 

});