2011-11-14 16 views
8

me gustaría tener un validador a distancia para un campo de texto. Mi PHP devuelve valor verdadero/falso. He intentado algo como esto:Extjs4 - validación remota

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

El problema es que la petición AJAX es asynchonous y el validador da "valores no definidos" error. ¿Hay alguna devolución de llamada? Por lo tanto, devolvería falso de forma predeterminada y haría que el campo de texto sea válido una vez que la llamada ajax haya finalizado.

He tratado de google para extjs validación remota, pero no hay mucho al respecto.

ayudar a nadie o sugerencias? Gracias.

Respuesta

11

tal vez usted no debe usar el validador a continuación, agregue un listner sobre el cambio para el campo de texto y utilizar los métodos markInvalid y clearInvalid para la visualización de la validación.

{ 
    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; 
      }        
      } 
     }); 
     }  
    } 
} 

refugio I; t probado, pero podría funcionar para su aproach

EDITAR que he hecho algunas modificaciones en el código para incluir el validador ..

+1

Muchas gracias por su respuesta. Esto solo funciona al escribir en el campo de texto. El campo de texto siempre se marca como válido una vez que el campo de texto pierde el foco. Me temo que esto tampoco resuelve form.isValid() para el envío de formularios. – gotroch

+0

he editado mi respuesta – nscrob

+2

Gracias nscrob! ¡Me hiciste el día! – 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(); 
 
    } 
 
    }); 
 
    } 
 
} 
 
}

este código html i probado (versión extjs es 5,0), está bien, es a partir de TonyTuan'sB log, todo esto puede ver este enlace: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html

Cuestiones relacionadas