Sencha Touch 数据层篇 Model
2011-12-07 10:10 威老 阅读(6527) 评论(1) 收藏 举报模型 model
一个最基本的模型声明其所代表的数据对象所具有的字段名称。复杂一点的,可以再加入一些字段类型的声明、字段的验证规则、字段的映射。
定义模型
定义一个模型非常简单:继承“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。
浙公网安备 33010602011771号