Problema de validación de combo remoto de extjs

1

Hola, estoy usando extjs 3.2.1 lib e iam nuevo en extjs,

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 .

Mi problema es que la propiedad forceSelection valida el control solo en el evento de desenfoque y borra el texto del combo.Si el usuario ingresa el texto no válido en el combo, el botón de guardar está habilitado (ya que solo estoy marcado el allowblank (falso) para el combo) en el formulario, y cuando presiona el botón Guardar, se envía con texto no válido en el combo.

También he comprobado el método de formulario isvalid () y el combo, dentro del evento de guardado también devuelve el 'verdadero'.

¿Cómo puedo validar en este escenario en particular?

4

Potencialmente, podría anular la función validateValue en el ComboBox, y si forceSelection se establece en true, verifique el valor sin procesar del campo con la tienda, así:

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

Puede agregar un detector de eventos para que el evento de desenfoque valide el texto ingresado por el usuario.

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
}

});