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

  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7295375.html
Copyright © 2011-2022 走看看