我是Sencha Touch的新手并尝试验证登录表单。我有两个领域的简单用户模型:电子邮件,密码。我已经用消息创建了一些验证规则:
Ext.define('FirstApp.model.User', {
extend : 'Ext.data.Model',
config : {
fields : [{
name : 'email',
type : 'string'
}, {
name : 'password',
type : 'password'
}],
validations : [{
type : 'presence',
name : 'email',
message : "Enter email"
}, {
type : 'presence',
name : 'password',
message : "Enter Password"
}, {
type : 'format',
name : 'email',
matcher : /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/,
message : "Wrong Email Format"
}]
}
});
在LoginForm视图中我想验证登录表单,但是当输入错误的参数时,警报弹出窗口显示未定义而不是消息。输入正确的数据表格后发送。在这里,您可以看到LoginForm代码:
Ext.define('FirstApp.view.login.LoginForm', {
extend : 'Ext.form.FormPanel',
xtype : 'loginpanel',
requires : ['Ext.form.FieldSet', 'FirstApp.model.User', 'Ext.field.Email', 'Ext.field.Password'],
config : {
title : 'LOGIN',
scrollable : 'vertical',
items : [{
xtype : 'fieldset',
title : 'Login',
defaults : {
required : true,
},
items : [{
xtype : 'emailfield',
name : 'email',
placeHolder : 'Email'
}, {
xtype : 'passwordfield',
name : 'password',
placeHolder : 'Password'
}]
}, {
xtype : 'button',
text : 'Log in',
ui : 'confirm',
handler : function() {
var model = Ext.ModelMgr.create(this.up('formpanel').getValues(), 'FirstApp.model.User');
var errors = model.validate(); console.log(errors);
var message = '';
if (errors.isValid()){
// Validation successful - show loader
Ext.Viewport.setMasked({
xtype:'loadmask',
message:'Logging in...'
});
// Login
this.up('formpanel').submit({
url: 'http://localhost/firstappweb/www/en/?do=login',
method: 'POST',
success: function(form, result) {
console.log(result);
Ext.Viewport.setMasked(false);
},
failure: function(form, result) {
console.log(result);
Ext.Viewport.setMasked(false);
}
});
} else {
// Validation failed
console.log(errors.items);
Ext.each(errors.items, function(rec, i) {
message += rec.message+"<br />";
});
Ext.Msg.alert("Validate", message, function(){});
return false;
}
}
}, {
// Do not log in
xtype : 'toolbar',
docked : 'bottom',
layout : {
pack : 'center'
},
items : [{
xtype : 'button',
text : 'Do not log in',
handler : function() {
Ext.Msg.alert("You do not want to log in?", 'Shame on you!', function() {
});
// this.push();
}
}]
}]
}
});
提前感谢您的帮助。
答案 0 :(得分:4)
我假设你已经完成了errors.items
的console.log,你必须使用调试器看到rec.message
值才能理解为什么它是未定义的。
无论如何,这就是我要做的事情:
var data="";
errors.each(function (item, index, length) {
// Each item in the errors collection is an instance of the Ext.data.Error class.
data = data + '|'+item.getField()+' - '+ item.getMessage() +'|';
});
Ext.Msg.alert("Validation Failed", data);