Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418116
  • 博文数量: 48
  • 博客积分: 1032
  • 博客等级: 上士
  • 技术积分: 1256
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-19 13:24
文章分类

全部博文(48)

文章存档

2014年(3)

2013年(23)

2012年(22)

分类: Web开发

2013-03-10 22:55:35

数据模型是对真实世界事物的抽象,model相当于DB中的table 或JAVA中的class;

Ext.onReady(function(){
//创建模型类的两种方法

//DB中对于对象的描述:table person(name,age,email);
//使用Ext.define创建模型类
Ext.define("person",{
extend:"Ext.data.Model",
fields:[
{name:'name',type:'string'},
{name:'age',type:'int'},
{name:'email',type:'string'}
]
});
//使用regModel创建模型类  该方法可以不使用extend来说明;
Ext.regModel("person",{
fields:[
{name:'name',type:'string'},
{name:'age',type:'int'},
{name:'email',type:'string'}
]
});

//实例化模型类(person类)

//使用new关键字创建
var p = new person({
name:'hello',
age:26;
email:'world@qq.com'
});
alert(p.get('name'));

//使用create创建
var p = Ext.create('person',{
name:'hello',
age:26;
email:'world@qq.com'
});
alert(p.get('age'));

//使用ModelMgr.create来创建
var p = Ext.ModelMgr.create({
name:'hello',
age:26;
email:'world@qq.com'
},'person');
alert(p.get('email'));//p为对象;person为类;
});

//validations数据验证  官方给出的例子
Ext.onReady(function(){
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}
],
//type表示要验证的类型  field表示待验证的类的字段 后面的表示条件;
validations: [
{type: 'presence',  field: 'age'},
{type: 'length',    field: 'name',     min: 2},
{type: 'inclusion', field: 'gender',   list: ['Male', 'Female']},
{type: 'exclusion', field: 'username', list: ['Admin', 'Operator']},
{type: 'format',    field: 'username', matcher: /([a-z]+)[0-9]{2,3}/}
]
});

var p = Ext.create("person",{
name:'hello',
age : 26,
phone : '1234567',
gender : '男',
username : 'world',
alive : false
});

var errors = p.validate();
//通过for循环进行遍历
var len = errors.items.length;
var i;
for(i = 0; i < len; i++){
console.info(errors.items[i].field);
console.info(errors.items[i].message);
}
//或者通过遍历函数each()
errors.each(function(v){
console.info(v.field);
console.info(v.message);
});
});

扩展validate:
validate的属性和方法是一一对应的,如果我们需要改变错误的提示信息,只需要改变validations属性的值就行了;
Ext.data.validations.lengthMessage = "错误的长度";

第一种方法:新建一个类继承于Ext.data.validations再添加新的方法;

第二种方法:改造原生类
Ext.apply(Ext.data.validations,{
age:function(config,value){//仿造源代码中的validations的构造方法
if (value === undefined || value === null) {
            return false;
        }

var min = config.min;
var max = config.max;
if((min && min <= value) && (max && value <= max)){
return true;
}
else{
this.ageMessage = this.ageMessage + "他的范围应在[" + min + "~" + max + ']';
return false;
}
},
ageMessage:'age出错'  //ageMessage中的age必须和上面的age相同
})
调用方法:
validations: [
{type: 'age',    field: 'age', min:0, max: 150},
]

//代理:proxy
Ext.onReady(funtion(){
Ext.define('user',{
extend:"Ext.data.Model",
fields:[
{name:'name',type:'string'},
{name:'age',type:'int'},
{name:'email',type:'string'}
],
proxy:{
type:'ajax',
url:'person.jsp'
}
});

var p = Ext.ModelManager.getModel('person');
p.load(1,{ //1 表示id号
scope:this,
failure:function(record,operation){},
success:function(record,operation){
alert(record.data.name);
},
callback:function(record,operation){},

});
});

person.jsp:
<%
response.getWriter().write("{name:'hello',age:26,email:'word@qq.com'}");
%>
阅读(2941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~