我想要一个文本字段的远程验证器。我的PHP返回true / false值。我尝试过这样的事情:
{
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请求是异步的,验证器给出“未定义的值”错误。有没有回调?所以我默认会返回false,并且一旦ajax调用完成就使textfield有效。
我试图谷歌进行extjs远程验证,但没有太多关于它。
有人帮忙或建议?谢谢。
答案 0 :(得分: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;
}
}
});
}
}
}
我没有尝试过,但可以为你的方法工作
编辑我对代码进行了一些修改以包含验证器..
答案 1 :(得分: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的博客, 所有这些你可以看到这个链接: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html