zoukankan      html  css  js  c++  java
  • 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。

    转载请注明原文地址
    作者:威老
    博客地址:http://www.cnblogs.com/weilao
  • 相关阅读:
    Spring Boot使用Maven自定义打包方式
    Java操作FileUtils读取数据与写入数据到文件
    将Map中对应的key和value赋值到对象中
    获取List集合对象中某一列属性值
    一文告诉你如何使用java调用http接口
    无音频头音频数组,转写成可播放音频文件
    解析WAV音频文件----》生成WAV音频文件头
    Java中解析wav音频文件信息:音频声道数,采样频率,采样位数、声音尺寸
    jquery click()方法模拟点击事件对a标签不生效
    js speech
  • 原文地址:https://www.cnblogs.com/weilao/p/2278420.html
Copyright © 2011-2022 走看看