2016-04-26 10 views
2

Ich habe ein Anmeldeformular mit einem Textfeld für den Benutzernamen. Zu diesem Textfeld hinzugefügt ich eine benutzerdefinierte Validator-Funktion die Verfügbarkeit für den ausgewählten Benutzernamen zu überprüfen:ExtJS 6: Validator auf einem Textfeld funktioniert nicht richtig

      xtype: 'textfield', 
          name: 'username', 
          msgTarget: 'under', 
          bind: { 
           fieldLabel: '{texts.username}' 
          }, 
          allowBlank: false, 
          minLength: 3, 
          checkChangeBuffer: 300, 
          validator: function (value) { 
           if (value.length < 3) { 
            return null; 
           } 
           Ext.Ajax.request({ 
            method: 'POST', 
            url: '/rest/availability', 
            params: { 
             name: value 
            } 
           }).then(
            function (result) { 
             return Ext.JSON.decode(result.responseText) ? true : 'Username already exists'; 
            }, 
            function (response) { 
             return 'Server issue.'; 
            } 
           ) 
          } 

Dies ist wahrscheinlich es tun sollten. Aber es tut nicht. ich einen gebrochenen Fehler angezeigt wird, zeigt der Prüfer immer ungültig und die Meldung nicht angezeigt wird:

textfield - user exists

Wenn ich die Antwort überprüfen bekomme ich den richtigen Wert vom Server. Was fehlt mir hier?

Vielen Dank im Voraus.

+2

See: http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/14220323#14220323 –

+2

Siehe: http: // stackoverflow.com/a/8121254 –

+0

Vielen Dank. Ich glaube, ich habe das übersehen. – xdn

Antwort

0

Damit die Validierung erfolgreich ist, müssen Sie den Wert true zurückgeben.

validator: function(value) { 
    if(!valid) { 
     return 'error message'; 
    } 
    return true; // successfully passed 
} 
+0

Danke! Aber ich habe bereits eine Antwort von einem der älteren Beiträge verwendet. Ich werde meine Antwort bald aktualisieren! – xdn