Javascript 如何在sencha touch/ext js模型中编写验证

Javascript 如何在sencha touch/ext js模型中编写验证,javascript,extjs,sencha-touch,sencha-touch-2,Javascript,Extjs,Sencha Touch,Sencha Touch 2,我有一个这样的模型 Ext.define('app.model.TeamEmpAssignment', { extend : 'Ext.data.Model', config : { idProperty : 'teamEmpId', fields : [{ name : 'teamEmpId',

我有一个这样的模型

Ext.define('app.model.TeamEmpAssignment', {
            extend : 'Ext.data.Model',
            config : {
                idProperty : 'teamEmpId',
                fields : [{
                        name : 'teamEmpId',
                        type : 'int'
                    }, {
                        name : 'actName'
                    }, {
                        name : 'beginDateTime'
                    }, {
                        name : 'endDateTime'
                    },

                ],

                validations : [{
                        field : 'beginDateTime',
                        type : 'presence',
                        message : 'Effective Begin Date Time required'
                    }, {
                        field : 'endDateTime',
                        type : 'presence',
                        message : 'Effective End Date Time required'
                    },
                ],

            }

        });
我必须编写一个验证来比较endDateTime>startDateTime


我正在尝试sencha touch 2.3.1

验证类型来自Ext.data.validations单例。您可以在这里添加自己的验证器,但是该方法不提供模型中的所有字段(听起来您需要这些字段)。我们建议将您的验证器移动到不同的位置(模型之外),可能在相关表单组件上(加载后或保存前)。

我知道这是一个老问题,但我在处理同一问题时遇到了它,希望与大家分享我的方法

我在模型中创建了一个方法,用于进行自定义验证,类似于:

Ext.define('app.model.TeamEmpAssignment', {
    extend : 'Ext.data.Model',
    config : {
        // config here
    },

    checkDates: function (errors) {
        // assuming the dates are timestamps
        if (this.get('beginDateTime') > this.get('endDateTime')) {
            errors.add(Ext.create('Ext.data.Error', {
                field  : 'beginDateTime',
                message: 'Begin date can\'t be after end date'
            }));
        }
    }

});
var record = Ext.create('Ext.data.Errors');
// set some values here
var errors = record.validate();
record.checkDates(errors);

console.log(errors.isValid());
您将注意到checkDates有一个参数-errors。此参数实际上是模型的validate方法返回的Ext.data.Errors对象。所以我们可以做一些类似的事情:

Ext.define('app.model.TeamEmpAssignment', {
    extend : 'Ext.data.Model',
    config : {
        // config here
    },

    checkDates: function (errors) {
        // assuming the dates are timestamps
        if (this.get('beginDateTime') > this.get('endDateTime')) {
            errors.add(Ext.create('Ext.data.Error', {
                field  : 'beginDateTime',
                message: 'Begin date can\'t be after end date'
            }));
        }
    }

});
var record = Ext.create('Ext.data.Errors');
// set some values here
var errors = record.validate();
record.checkDates(errors);

console.log(errors.isValid());
我们可以使用isValid,因为它所做的只是检查Ext.data.Errors集合是否包含项

我目前正在这样使用它,但是重写validate方法将非常容易,因此您不必在外部调用自定义验证

Ext.define('app.model.TeamEmpAssignment', {
    extend : 'Ext.data.Model',
    config : {
        // config here
    },

    checkDates: function (errors) {
        // assuming the dates are timestamps
        if (this.get('beginDateTime') > this.get('endDateTime')) {
            errors.add(Ext.create('Ext.data.Error', {
                field  : 'beginDateTime',
                message: 'Begin date can\'t be after end date'
            }));
        }
    },

    validate: function () {
        var errors = this.callParent(arguments);

        this.checkDates(errors);

        return errors;
    }

});