Model定义的两种方式
第一种
Ext.define("User",{
extend:"Ext.data.Model",
fields:[{
name:'username',
type:'string'
},{
name:'password',
type:'string'
}]
});
另外一种
Ext.regModel("User",{
fields:[{
name:'username',
type:'auto'
},{
name:'password',
type:'auto'
}]
});
怎样实例化?
首先我们尝试最主要的方式 new
var user = new User({username:'somnus',password:'123456'});
console.info(user.get('password'));//123456
然后用create方式
var user = Ext.create('User'{username:'somnus',password:'123456'});
console.info(user.get('password'));//123456
extjs4还给model单独提供了一种对象创建方式
var user = Ext.ModelManager.create({username:'dream5',password:'123456'},"User");
怎样远程载入数据到model
Ext.regModel('User', {
fields : [
{name : 'name',type : 'string'},
{name : 'id',type : 'int'}
],
proxy : {
type : 'ajax',
url : 'userServer.jsp'
}
});
var user = Ext.ModelManager.getModel('User');
user.load(1,{
success:function(rec){
console.log(rec.get('username'));
}
});
怎样校验model中的数据
Ext.define("User",{
extend:"Ext.data.Model",
fields:[{
name:'username',
type:'string'
},{
name:'password',
type:'string'
}],
validations:[{
type:'length',field:'username',min:2,max:10
},{
type:'number',field:'password',min:6,max:20
}]
});
var user = Ext.create('User'{username:'somnus',password:'123456'});
var errors = user.validate();
这里不得不提下我在密码那里新增了一个长度验证,那怎样自己定义呢?且看
//自己定义数值范围验证
Ext.apply(Ext.data.validations,{
number : function(config, value){
if (value === undefined){
return false;
}
var min = config.min;
var max = config.max; if ((min && value < min) || (max && value > max)){
this.numberMessage = this.numberMessage+"它应该在["+min+"-"+max+"]";
return false;
} else{
return true;
}
},
numberMessage : '数值范围错误。'
});
Model之间是怎样关联的
我们在hibernate中已经认识到,对象之间是能够关联的,extjs在这里也实现了
Ext.regModel('User', {
fields : ['name','id'],
hasMany : {
model : 'Product',
name : 'getProducts',
autoLoad : false
},
proxy : {
type : 'ajax',
url : 'userServer.jsp'
}
});
Ext.regModel('Product', {
fields : ['id','title','user_id'],
proxy : {
type : 'ajax',
url : 'ProductServer.jsp',
reader : {
type : 'json',
root : 'products'
}
}
});
var user = Ext.ModelManager.getModel('User');
// 读取id为1的User实例
user.load(1, {
success : function(rec) {
// 获取user_id为1的产品Store
var products = rec.getProducts();
// 载入user_id为1的产品数据
products.load({
callback : function(records, operation, success) {
Ext.each(records,function(record){
console.info(record.get('title'));
})
}
});
}
});
Extjs4还提供了一种配置方式
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id'],
associations: [
{type: 'hasMany', model: 'Product', name: 'getProducts'}
]
});
上面我给的样例是一对多,一对一肯定也是存在的,翻看api
hasOne
belongsTo