Sencha Touch 数据层篇 Model

模型 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。

你可能感兴趣的:(Sencha Touch)