zoukankan      html  css  js  c++  java
  • Extjs系列篇(3)—-model数据模型

    一、Model的两种创建方式                                                          

    model就相当于java中的类,下面我们就来用两种方式来进行创建。

    1.define方式创建model: 

    1 Ext.define("person",{
    2             extend:"Ext.data.Model",
    3             fields:[
    4                  {name:'name',type:'auto'},
    5                  {name:'age',type:'int'},
    6                  {name:'email',type:'auto'}
    7             ]
    8 });

    采用这种方式,第一个参数是model的名称,需要继承自Ext.data.Model,同时给定字段名称和类型。

    2.采用regModel的方式创建model:

    1 Ext.regModel("user",{
    2             fields:[
    3                  {name:'name',type:'auto'},
    4                  {name:'age',type:'int'},
    5                  {name:'email',type:'auto'}
    6             ]
    7 });

    这种方式比第一种稍许简洁,不需要继承,因为它默认返回就是一个model。

    二、创建Model的实例

    创建model的实例有3种方式,model就相当于一个class,而model的实例就相当于类的对象。

    1.new方式创建实例:

    1 var p = new person({
    2             name : 'luoxiao',
    3             age:26,
    4             email:"3435@12.com"
    5 });

    这种创建的方式和我们java中创建对象一样,比较形象化。

    2.create方式创建实例:

    1 var p1 = Ext.create("person",{
    2             name : 'luoxiao',
    3             age:26,
    4             email:"3435@12.com"
    5 });

    第一个参数给定创建的model的名称,其次给定参数,这样就可以创建一个实例。

    3.ModelMgr创建实例:

    var p2 = Ext.ModelMgr.create({
                name : 'luoxiao',
                age:26,
                email:'3435@12.com'
    },'person');

    这种方式参数上和第二个方式是相反的。

    三、自定义验证

    Ext中给我们提供了一些常用的验证方式,但是这不能完全满足我们的需求,我们可以再此基础上自己进行扩展,自定义验证的一系列规则。首先我们先扩展validation:

     1 Ext.apply(Ext.data.validations,{
     2             age : function(config,value){
     3                 var min = config.min;
     4                 var max = config.max;
     5                 if(min <= value && value<=max){
     6                     return true;
     7                 }else{
     8                     this.ageMessage = this.ageMessage+"应该在["+min+"~"+max+"]";
     9                     return false;
    10                 }
    11             },
    12             ageMessage:'age数据出现了错误'
    13         });

    Ext.apply用于实现把一个对象中的属性应用于另外一个对象中,相当于属性拷贝。也就是说,我们扩展的age这个属性的规则将会应用到Ext.data.validations中去,在age的function中,第一个参数是配置的参数属性,第二个是传递的值。下面,我们定义一个model来应用这种验证:

     1 Ext.define("person",{
     2             extend:"Ext.data.Model",
     3             fields:[
     4                  {name:'name',type:'auto'},
     5                  {name:'age',type:'int'},
     6                  {name:'email',type:'auto'},
     7             ],
     8             validations:[
     9                  {type:"length",field:"name",min:2,max:6},
    10                  {type:"age",field:"age",min:0,max:150}
    11             ]
    12         });

    可以看到,我们对name的length进行了验证,包括自定义的age,提供了最小值和最大值。

    1 var p1 = Ext.create("person",{
    2             name : 'luoxiao',
    3             age:-26,
    4             email:"3435@12.com"
    5 });

    这里创建一个person的实例,age为-26,不满足给定的验证条件。

    1 var errors = p1.validate();
    2         var errorInfo = [];
    3         errors.each(function(v){
    4             errorInfo.push(v.field+" "+v.message);
    5         });
    6         alert(errorInfo.join("
    "));

    验证后得到错误提示。

    四、简单数据代理

    什么是数据代理,数据代理就是来完成数据的CURD。

     1 (function(){
     2     Ext.onReady(function(){
     3         Ext.define("person",{
     4             extend:"Ext.data.Model",
     5             fields:[
     6                  {name:'name',type:'auto'},
     7                  {name:'age',type:'int'},
     8                  {name:'email',type:'auto'},
     9             ],
    10             proxy:{
    11                 type:'ajax',
    12                 url:'lesson3/person.jsp'
    13             }
    14         });
    15 
    16         var p = Ext.ModelMgr.getModel("person");
    17 
    18         p.load(1, {
    19             scope: this,
    20             failure: function(record, operation) {
    21             },
    22             success: function(record, operation) {
    23                 alert(record.data.name);
    24             },
    25             callback: function(record, operation, success) {
    26             }
    27         });
    28     });
    29 })();

    这里使用的ajax的方式去请求数据,将jsp中的数据请求到然后load进去。

    1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    2 
    3       <%
    4           response.getWriter().write("{name:'uspcat.com',age:26,email:'luoxiao.com'}");
    5        %>

    五、model的一对多

     1 (function(){
     2     Ext.onReady(function(){
     3         //teacher
     4         Ext.regModel("teacher",{
     5             fields:[
     6                {name:'teacherId',type:'int'},
     7                {name:'name',type:'auto'}
     8             ],
     9             hasMany:{
    10                 //与谁有关系
    11                 model:'student',
    12                 name:'getStudent',
    13                 filterProperty:'teacher_Id'
    14             }
    15         });
    16 
    17         //student
    18         Ext.regModel("student",{
    19             fields:[
    20                    {name:'studentId',type:'int'},
    21                    {name:'name',type:'auto'},
    22                    {name:'teacher_Id',type:'int'}
    23             ]
    24         });
    25 
    26         //t.students   可以得到子类的一个store数据集合
    27 
    28     });
    29 })();
  • 相关阅读:
    系统综合实践第三次实践
    系统综合实践第二次实践作业
    第1次实践作业
    软工总结
    团队Beta演示
    团队Beta5
    软工实践个人总结
    第09组 Beta版本演示
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/luoxiao-wang/p/3610572.html
Copyright © 2011-2022 走看看