zoukankan      html  css  js  c++  java
  • ExtJs4学习(六)MVC中的Model

    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

  • 相关阅读:
    线索二叉树的构建和遍历------小甲鱼数据结构和算法
    小甲鱼数据结构和算法-----二叉树的构建和前序遍历
    python爬虫爬取煎蛋网妹子图片
    C语言实现汉诺塔问题
    C语言实现中缀表达式转后缀表达式
    深度优先算法--判断迷宫的一个起点能否到达一个终点
    python 爬取36K新闻
    栈的操作实现逆波兰表达式的计算
    python 实现汉诺塔问题
    【POJ 3258】River Hopscotch
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7295375.html
Copyright © 2011-2022 走看看