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

  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/love-omnus/p/4196564.html
Copyright © 2011-2022 走看看