Sencha Touch 2.1 - 使用Model进行表单验证

时间:2013-01-25 10:25:37

标签: validation sencha-touch sencha-touch-2 sencha-touch-2.1

我是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();
                }
            }]
        }]
    }
}); 

提前感谢您的帮助。

1 个答案:

答案 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);