一个最基本的模型声明其所代表的数据对象所具有的字段名称。复杂一点的,可以再加入一些字段类型的声明、字段的验证规则、字段的映射。
定义一个模型非常简单:继承“Ext.data.Model”,然后给他指定一些字段就行了。
最简单的模型甚至连字段类型都不需要声明,这时的每个字段都是一个简单的字符串:
Ext.define('User', { extend: 'Ext.data.Model', fields: ['name', 'age', ' phone', 'alive'] });
也可以给模型的每个字段声明类型,这时每个字段都是一个包含两个属性的对象,就像这样:
Ext.define('User', { extend: 'Ext.data.Model', fields: [ {name: 'name', type: 'string'}, {name: 'age', type: 'int'}, {name: 'phone', type: 'string'}, {name: 'alive', type: 'boolean', defaultValue: true} ] });
Ext.data.Model类提供了模型的验证支持,通过配置validation可为模型添加验证规则。
Ext.define('User', { extend: 'Ext.data.Model', fields: [ {name: 'name', type: 'string'}, {name: 'age', type: 'int'}, {name: 'phone', type: 'string'}, {name: 'gender', type: 'string'}, {name: 'username', type: 'string'}, {name: 'alive', type: 'boolean', defaultValue: true} ], validations: [ {type: 'presence', field: 'age'}, {type: 'length', field: 'name', min: 2}, {type: 'inclusion', field: 'gender', list: ['Male', 'Female']},//枚举型,值必须在list中。 {type: 'exclusion', field: 'username', list: ['Admin', 'Operator']}, {type: 'format', field: 'username', matcher: /([a-z]+)[0-9]{2,3}/}//值必须匹配正则表达式 ] });
配置了验证规则后,就可以使用validatie()方法就会返回一个包含错误信息的Ext.data.Errors对象。通过这个对象,我们可以知道,有哪些字段出了错误,出了哪些错误。下面是使用validate()方法的示例:
var instance = Ext.create('User', { name: 'Ed', gender: 'Male', username: 'edspencer'//这里username不符合规则 }); var errors = instance.validate(); console.log(errors.isValid());//存在错误输出"false" console.log(errors.length);//有一个错误,输出“1” console.log(errors.getByField('name'));//没有错误输出空数组“[]” console.log(errors.getByField('gender'));//没有错误输出空数组“[]” console.log(errors.getByField('username'));//[{field: "username",message: "is the wrong format"}]
一个复杂的数据可以用多个数据模型来表示。使用belongsTo配置项来声明这个模型是属于另一个模型的;使用hasMany配置项,声明这个模型的数组类型字段。
Ext.define('Post', { extend: 'Ext.data.Model', fields: ['id', 'user_id'], belongsTo: 'User', hasMany: {//使用hasMany配置项,声明这个模型的数组类型字段。 model: 'Comment', name: 'comments' } }); Ext.define('Comment', { extend: 'Ext.data.Model', fields: ['id', 'user_id', 'post_id'], belongsTo: 'Post'//使用belongsTo配置项,声明这个模型从属于另一个模型 }); Ext.define('User', { extend: 'Ext.data.Model', fields: ['id'], hasMany: ['Post', { model: 'Comment', name: 'comments' }] });
使用association配置项也能实现hasMany功能。
Ext.define('User', { extend: 'Ext.data.Model', fields: ['id'], associations: [//使用association,要用type配置关系类型 {type: 'hasMany', model: 'Post', name: 'posts'}, {type: 'hasMany', model: 'Comment', name: 'comments'} ] });
OK,今天就到此为止。下一篇威老将会为大家介绍Sencha Touch数据层中的另一个关键类:Ext.data.Store。