ExtJS 数据模型
自定义数据模型
数据模型类其实就是一个继承自Ext.data.Model 的类。
Ext.define('MyApp.User', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', type: 'string' },
{ name: 'age', type: 'int' },
{ name: 'phone', type: 'string' }
]
});
fields 属性中定义了该模型的字段,它可以是对应到数据库中的字段。在使用的时候,数据模型包含的字段和类的属性使用方式不太相同。要访问字段的值,需要视同get 和 set 方法。
var Tom = Ext.create("MyApp.User", {
name: 'Tom',
age: 26,
phone:'123456'
});
Tom.set('age', 20);
Ext.MessageBox.alert('提示', Tom.get('age'));
字段类型和转换器
在定义数据模型的时候,我们可以定义字段的类型和该类型的转换器。例如,我们将为User类添加birthday字段,在初始化的时候,我们可能会传入一个字符串类型的日期格式,这个时侯就需要我们来定义一个类型转换器,将字符串格式的日期转换为Date类型。
Ext.define('MyApp.User', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', type: 'string' },
{ name: 'age', type: 'int' },
{ name: 'phone', type: 'string' },
{
name: 'birthday',
type: 'date',
convert: function (value, record) {
if (Ext.isDate(value))
return value;
else if (Ext.isString(value)) {
return Ext.Date.parse(value, "Y-m-d");
}
}
}
]
});
在代码中添加了birthday字段,并为该字段设置了转换器,当传入的类型为string时,将会被转换为标准的时间类型。用法如下:
var Tom = Ext.create("MyApp.User", {
name: 'Tom',
age: 26,
phone: '123456',
birthday:'2000-01-15'
});
alert(Tom.get('birthday'));
数据验证
我们可以使用数据模型来验证数据是否正确。在上面的例子中,我们希望phone 字段的长度在8和15之间,那么,我们需要这样修改代码:
Ext.define('MyApp.User', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', type: 'string' },
{ name: 'age', type: 'int' },
{ name: 'phone', type: 'string' },
{
name: 'birthday',
type: 'date',
convert: function (value, record) {
if (Ext.isDate(value))
return value;
else if (Ext.isString(value)) {
return Ext.Date.parse(value, "Y-m-d");
}
}
}
],
validations: [
{ field: 'phone', type: 'length', min: 8, max: 15 }
]
});
为phone 字段添加验证,验证类型为length,最小为8,最大为15,验证的代码如下:
var Tom = Ext.create("MyApp.User", {
name: 'Tom',
age: 26,
phone: '123456',
birthday:'2000-01-15'
});
var errors = Tom.validate();
var errorMsg = [];
if (!errors.isValid()) {
errors.each(function (error) {
errorMsg.push(error.field + " " + error.message);
});
Ext.Msg.alert("错误", errorMsg.join('<br />'));
}
我们将phone的长度设置为6位,很明显是不能通过验证的。程序运行起来以后,我们会得到下面的错误:


自定义验证规则
ExtJS 中虽然内置了一些验证规则,但这些规则面对庞大的业务需求肯定是不够的,所以ExtJS 还允许我们自定义验证规则。
Ext.apply(Ext.data.validations, {
ageMessage: '必须在0到150之间',
age: function (config, value) {
if (value === undefined || value === null) {
return false;
}
if (value < 0 || value > 150) {
return false;
}
return true;
}
});
Ext.apply 方法用来将第二个参数中的属性和方法复制到第一个参数中,在这里的作用是将我们定义的age规则添加到Ext 的验证规则中。
ExtJS 数据模型的更多相关文章
- Extjs学习笔记之九 数据模型(上)-extjs
来源:niutuku.com | vincent上传于2012-07-20 | 1802次浏览 | 0条评论 本文开始进入Extjs最核心最优秀的部分. 标签:Extjs 数据模型 Extjs的数 ...
- Javascript - ExtJs - 组件 - 分页
服务端只需要返回如下格式的字符串,ExtJs就可以解析并自动生成分页数据. , name: "sam" } ] } 准备: CREATE PROCEDURE [dbo]. ...
- Ext学习-基础概念,核心思想介绍
1.目标 本阶段的目标是通过学习一些基础知识来对EXTJS有个整体的了解,知道EXTJS的基础语法,核心设计思想等等 2.内容 1.基础部分学习 2.EXTJS类系统介绍 3.EXTJ ...
- 1 model的创建
extJs数据模型之Model博客分类: ExtJs 1 model的创建 //我们利用Ext.define来创建我们的模型类 //DB table person(name,age,email) ...
- ExtJS 4.2 教程-04:数据模型
转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-4-data-model ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 教程 ...
- [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
Model代表应用程序管理的一些对象.例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者.产品和汽车等定义一个Model.这些Model在 Ext.ModelManager中注册,被 ...
- ExtJS的数据模型
给大家介绍一下ExtJS的组件模型. 常见的Ajax的开发流程: 1.定义URL,metod,params 2.开发后台 接收JSON/XML数据 返回JSON/XML数据 3.前台回调 4.显示到 ...
- ExtJS 项目准备工作(一)
首先,需要从网上下载两个文件,一个是SenchaCmd-6.2.0-windows-64bit(我的电脑是window 10 64位) 另一个是ExtJs6的源码包(ext-6.0.0.415). 源 ...
- Extjs 学习总结-Ext.define自定义类
本教程整理了extjs的一些基本概念及其使用,包括自定义类(Ext.define).数据模型.代理等.本节介绍使用Ext.define自定义类 使用Ext.define自定义类 1. 首先看看js中自 ...
随机推荐
- 纯css3制作写轮眼开眼及进化过程
今天是火影忍者(漫画)宣告完结的日子,也是我首发的第一个随笔.看过火影的朋友都知道,写轮眼是什么,这里就不多说了.下面就直接展示整个效果,上张图,先睹为快: 目前已经测试 IE10.Firefox浏览 ...
- Visual Studio EventHandler Delegate 和 EventArgs
EventHandler代理 用来表示处理一个没有事件数据(event data)的事件(event)的 方法. 无论何时事件发生时,事件代理就被调用来触发以前事件驱动的其他事件(监听当前事件TCur ...
- ZOJ Problem Set - 3329(概率DP)
One Person Game Time Limit: 1 Second Memory Limit: 32768 KB Special Judge There is a very ...
- 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚
题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...
- eclipse建立springMVC 简单项目
http://jinnianshilongnian.iteye.com/blog/1594806 如何通过eclipse建立springMVC的简单项目,现在简单介绍一下. 工具/原料 eclip ...
- mfc对话询问窗体
// 显示消息对话框 nRes = MessageBox(_T("您确定要跳转网站?"), _T("提示"), MB_OKCANCEL | MB_I ...
- JS学习:第二周——NO.3盒子模型
1.CSS盒子模型包括四个部分组成:设定的宽高+padding+border+margin: 2.JS盒子模型:通过系统提供的属性和方法,来获取当前元素的样式值 JS提供的属性和方法: clien ...
- php周计划1
2016.09.07-2016.09.11 2016.09.07 速成教程 javascript基础 遇到问题:盒子模型中“回”定位问题未解决 css定位:css有三种基本的定位机制 1.普通流:元 ...
- Life Is A Funny Proposition After All
你们有没有坐下思考,感到疑惑 ,静静思考,我们为什么在这里 ,生活为什么如此这般 这个问题让无数聪明人喝酒买醉,这是最最奇怪的事情,他们都想弄清楚,科学家们可以展示上千种不同的理论,但从未证明这是为什 ...
- epoll & socket 连接数突破
http://shenfeng.me/how-far-epoll-can-push-concurrent-socket-connection.html