(一)、首先我们介绍一下Model类中比较常用的几个属性,如果我们想构建一个Model类,最主要的属性就是(Fields)属性,这个属性接受一个数组。用来设置Model中所包含的字段。定义的格式如下:
 
Ext.regModel("Student",{
 
   fields:[
 
{name:"name",type:"string"},
{name:"class",type:"string"}
   ]
});
 
(二)、在我们了解到怎么定义一个简单的Model,以及定义Model所需要的属性时。下面我们来看一下。Model类为我们提供了哪些比较好的功能。
 
    1、首先我们来看一下fields属性中的功能,例如:我们现在定义了一个如上的Model类,然后,数据源返回班级(class)这个属性时。格式为(1、2、3),如果我们把这样的数据呈现出来,那么将显示的很不友好。所以,我们要在呈现之前,对数据做一个转换。把原本不友好的数据,转换成有好的数据,这就用到了。fields中的convert属性。具体的代码如下(注意红色字体部分):
 
Ext.regModel("Student",{
 
   fields:[
 
{name:"name",type:"string"},
{name:"class",type:"string",convert:function(val){
 
if(val=="1"){return "一班"};
if(val=="2"){return "二班"};
if(val=="3"){return "三班"};
}}
   ]
});
 
通过上边的设置,我们就对数据做了相应的转换了,呈现到客户面前的不再是(1、2、3),这样我们的呈现就变得比较友好了。
 
 
    2、另外,在我们定义好一个Model类之后,我们就可以使用这个Model类。最简单的方式,我们是直接new一个Model类的对象,然后将我们的数据信息加载到对象中,有点类似于Ext3.X中的record的对象的使用。代码如下:
 
var student=new Student({
 
name:"Jerry",
 
class:"2"
 
});
 
上述代码我们根据Student的模型类,定义了一个该类的对象,但是,往往在我们的应用程序中,像这样的情况很少,毕竟我们的数据不一定都是这种一成不变的数据,有时候我们需要从后台加载我们的数据,然后给于我们的model类。这就需要我们的模型类有能够请求后台的能力,这也是Model中提供的第二个功能,Model中提供一个属性proxy(代理)。这个proxy中有几个比较重要的属性(type、url、reader),type属性值是一个字符串形式,用来表明。该代理的一种类型,具体的我们可以查看API中了解有哪些类型,url也就是请求后台的url、reader,也就是我们要用什么样的阅读器,来解析我们的数据,具体的,我们可以看一下。下边简单的例子:
 
Ext.regModel("Student",{
 
   fields:[
 
{name:"name",type:"string"},
{name:"class",type:"string",convert:function(val){
 
if(val=="1"){return "一班"};
if(val=="2"){return "二班"};
if(val=="3"){return "三班"};
}}
   ],
   proxy:{
 
type:"rest",
url:"data/1.aspx",
reader:"json"
 
   }
});
 
Student.load(001,{
 
success:function(student){
 
//处理加载完成的逻辑
}
});
 
1.aspx返回的数据格式:
 
{id:001,name:"zhangsan",class:"2"}
 
经过上述的设置,我们的Model就可以与后台交互,并要求后台返回我们想要的数据了,这个也是之前record类所办不到的。
 
 
    3、在我们的应用程序中,可能我们定义的Model不止一个。但是,他们之间可能都是独立的,没有任何的关系,但是,在我们的应用程序中可能在后台返回的数据中存在一定的联系,而且我们又想让这些Model之间存在一定的联系,这样我们在处理起来,会比较简单一些。大家看下边的一段数据。
 
{
id:"009",
name:"Jerry",
subjects:[
 
{id:"001",name:"English"},
 
{id:"002",name:"Mathematics"}
]
}
 
在上述的数据中,科目和学生之间是有一定的联系的。所以,我们也在想,解析数据的时候,让他们保持这种联系,以便于我们更好的解析数据。这样我们就用到了Model中的belongsTo和hasMany这样两个属性。首先要解析这样的数据,我们需要定义好我们的Model类。如下:
 
Ext.regModel("subject",{
 
fields:[
 
{name:"id",type:"string"},
{name:"name",type:"string"}
],
belongsTo:"Stdudent"
});
 
 
Ext.regModel("Student",{
 
fields:[
 
{name:"id",type:"string"},
{name:"name",type:"string"}
 
],
 
proxy:{
 
type:"rest",
url:"data/1.aspx",
reader:"json"
},
 
hasMany:[{model:"subject",name:"subjects"}]
 
});
 
注意“hasMany”和“belongsTo”的使用。
 
在我们定义好Model后,下面我们就可以加载并解析我们的数据了。
 
Student.load("009",{
 
success:function(student){
 
alert(student.get("id"));
 
alert(student.subjects().getCount());//我们可以直接访问该学生的科目
}
})
 
});
 
    4、另外在ExtJS4的Model中还提供了对字段列的验证功能。我们想验证字段只需要设置Model类的validations属性即可,代码如下:

Ext.regModel("Student",{

fields:[

{name:"id",type:"string"},

{name:"name",type:"string"}

],

proxy:{

type:"rest",

url:"data/1.aspx",

reader:"json"

},

hasMany:[{model:"subject",name:"subjects"}],

validations:[

{type:"presence",field:"id"},

{type:"length",field:"name",min:3}

]

});

var student=new Student({id:"001",name:"z"});

var stuvalidate=student.validate();//得到验证类

stuvalidate.isValid();//返回验证结果true或false

stuvalidate.each(function(error){

alert(error.field+" "+error.message);//遍历验证的信息

});

EXtJS Ext.data.Model的更多相关文章

  1. ExtJs Ext.data.Model 学习笔记

    Using a Proxy Ext.define('User', { extend: 'Ext.data.Model', fields: ['id', 'name', 'email'], proxy: ...

  2. [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习

    Model代表应用程序管理的一些对象.例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者.产品和汽车等定义一个Model.这些Model在 Ext.ModelManager中注册,被 ...

  3. ExtJS笔记 Ext.data.Model

    A Model represents some object that your application manages. For example, one might define a Model ...

  4. ExtJS教程(5)---Ext.data.Model之高级应用

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jaune161/article/details/37391399 1.Model的数据验证 这里借助 ...

  5. ExtJs Ext.data.Store 处理

    var storeCpye = new Ext.data.GroupingStore({ proxy : new Ext.data.HttpProxy({ url : 'cxgl_cpye.app?d ...

  6. Extjs 项目中常用的小技巧,也许你用得着(5)--设置 Ext.data.Store 传参的请求方式

    1.extjs 给怎么给panel设背景色 设置bodyStyle:'background:#ffc;padding:10px;', var resultsPanel = Ext.create('Ex ...

  7. ExtJS笔记 Ext.data.Types

    This is a static class containing the system-supplied data types which may be given to a Field. Type ...

  8. 设置 Ext.data.Store 传参的请求方式

    设置 Ext.data.Store 传参的请求方式 1.extjs 给怎么给panel设背景色 设置bodyStyle:'background:#ffc;padding:10px;', var res ...

  9. 转: Ext.data.Store 修改Post请求

    Extjs 4.0版本 var Store = Ext.create('Ext.data.Store', { pageSize: pageSize, model: 'Ext.data.Model名称' ...

随机推荐

  1. 第一篇 入门必备 (Android学习笔记)

    第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具   ●Android之父 Android安迪·罗 ...

  2. Linux关闭防火墙步骤

    1   先查询防火墙状态 [root@old-09 ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ACCEPT) ...

  3. spring有关jar包的作用

    参考的是spring官网spring4.3版本. 链接:https://docs.spring.io/spring/docs/4.3.19.RELEASE/spring-framework-refer ...

  4. PropertiesUtil 读取properties

    package com.midea.clean.util; import java.io.InputStream; import java.io.UnsupportedEncodingExceptio ...

  5. Codeforces Round #485 (Div. 2) C题求三元组(思维)

    C. Three displays time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  6. <Using ZooKeeper><Deploy & Use>

    安装与部署 配置过程相当简单.集群模式部署: wget http://www-us.apache.org/dist/zookeeper/stable/zookeeper-3.4.10.tar.gz t ...

  7. L296 EST 科技英语翻译-美学取向 (上)

    tips:对语言进行恰如其分的润饰,讲究词法.句法及篇章的粘连,增加可读性. 1 Accuracy 精确性 科技文章用词要求准确,尽量避免含糊不清和一词多义 dead air静空气 2 Paralle ...

  8. mysql 数据类型day43

    数据类型 一数值类型 1 整数类型 默认是有符号的 unsigned 没有符号 zerofill0t 小整数 TINYINT [(m)] 1个字节 8bit 2**8 256 m 最多3位 最低 -1 ...

  9. 1)jquery validate 远程验证remote,自定义验证 , 手机号验证 2)bootstrap validate 远程remote验证的方法.

    1)jquery  validate 远程验证remote,自定义验证 1-1: js <script src="YYFramework/Public/js/jquery-3.1.1. ...

  10. linux和 unix 介绍

    linux和unix都是当今鼎鼎大名的操作系统,可以说改变了这个世界,也是当今科技产业的重要基础.让我们回顾一下他们的发展史吧. 1.unix起源. 上世纪六十年代时,大部份计算机都是采用批处理的方式 ...