`
hackbomb
  • 浏览: 212212 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

grid的继承类,构建方便的grid操作

    博客分类:
  • Ext
阅读更多

在以往建立grid的时都要建立很多的辅助类,比如store,column和record等等。尤其当一个页面里面有多个grid的时候,这样会有很多的冗余代码。使页面加载很忙。
因此自己找了相关的文件,写了一个grid的扩展类。使建立grid只需几行代码就可完成。

以下为扩展文件。其扩展类的名字为Ext.ux.grid.SimpleGrid。文件名字为:Ext.ux.grid.SimpleGrid.js
详细内容请查看代码。


// 重新扩展的grid组建
   Ext.namespace("Ext.ux.grid");  
   Ext.ux.grid.SimpleGrid = Ext.extend(Ext.grid.GridPanel, {  
       // 表格结构  
        structure : '', 
     
     
     
      //reader类型如果当为json的时候那么url不能空,当为array的时候dataObject不能为空
      readType:'json',
      // 获取数据的URL  
        url : '',  
      // 关键字段  
        keyField : '',  
      //数据对象
      dataObject:null,
      
      
      
        //是否需要分组,默认为false,如果设置为true须再设置两个参数一个为myGroupField和myGroupTextTpl
      needGroup:false,
      //分组的字段名称
      myGroupField:'',
      //分组显示的模板,eg:{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})
      myGroupTextTpl:'',
     
     
     
      //列模式的选择模式,默认为rowselectModel,如果相设置成check模式,就设置为check
      selectType:'',
     
     
     
     
        // 默认排序字段  
        defaultSortField : '',  
     
     
     
     
        // 是否需要分页工具栏,默认为true 
        needPage : true,  
 
        frame : false,  
       
      //是否带展开按钮,默认为false
        collapsible : false,  
 
        animCollapse : true,  
 
        loadMask : true,  
 
        viewConfig : {  
            forceFit : true 
        },  
 
        // private  
        initComponent : function() {  
            if (this.structure != '') {  
                this.initStructure();  
            }  
 
            Ext.ux.grid.SimpleGrid.superclass.initComponent.call(this);  
 
        },  
 
        // private  
        initEvents : function() {  
            Ext.ux.grid.SimpleGrid.superclass.initEvents.call(this);  
 
           /* this.getStore().load( {  
                params : {  
                    start : 0,  
                    limit : 30  
                }  
            });  
 
            */if (this.loadMask) {  
                this.loadMask = new Ext.LoadMask(this.bwrap, Ext.apply( {  
                    store : this.store  
                }, this.loadMask));  
            }  
        },  
 
        // private  
        initStructure : function() {  

            var oCM = new Array();   //列模式数组
            var oRecord = new Array();  //容器对数组
            // 构成grid的两个必须组件: column和record,根据structure将这两个组件创建出来
        
         //判断表格的选择模式
         if(this.selectType=='check'){
            var sm = new Ext.grid.CheckboxSelectionModel();
            oCM[oCM.length] = sm;//在列模式数组中添加checkbox模式按钮
            this.selModel = sm;//并将selModel设置为check模式
         }
        
         var len = this.structure.length;//得到结构的长度
            for (var i = 0;i < len; i++) {  
                var c = this.structure[i];  
                // 如果字段为hidden,则不生成filters和columnMode  
                if (c.hidden == undefined || !c.hidden) {  
                    oCM[oCM.length] = {  
                        header : c.header,  
                        dataIndex : c.name,  
                        width : c.width,  
                        // 类型为数字则右对齐  
                        align : c.type == 'numeric' ? 'right' : 'left',  
                        // 结构的渲染函数  
                        renderer : c.renderer
                    };  
                }  
                oRecord[oRecord.length] = {  
                    name : c.name,  
                    // 如果类型不是date型则全部为string型  
                    type : c.type == 'date' ? 'date' : 'string' 
                };  
            }  
            // 生成columnModel
            this.cm = new Ext.grid.ColumnModel(oCM);  
            //this.colModel = this.cm;  
            // 默认可排序  
            this.cm.defaultSortable = true;  

            // 生成表格数据容器  
            var record = Ext.data.Record.create(oRecord);  
        
         //判断读取类别,目前只实现了,jsonreader和arrayReader
         var reader;
         switch (this.readType){
            case 'json':
           
               reader = new Ext.data.JsonReader( {  
                  totalProperty : "totalCount",  
                  root : "result",  
                  id : this.keyField  //关键字段
               }, record); 
              
               this.ds = new Ext.data.GroupingStore( {  
                  proxy : new Ext.data.HttpProxy( {  
                     url : this.url  
                  }),  
                  reader : reader,  
                  sortInfo : {field : this.defaultSortField,direction : 'ASC'  },  
                  remoteSort : true ,
                  groupField:this.myGroupField
               });  
               break;
              
            case 'array':
               reader = new Ext.data.ArrayReader({},record);
              
               this.ds = new Ext.data.GroupingStore({
                  reader: reader,
                  data: this.dataObject,
                  sortInfo : {field : this.defaultSortField,direction : 'ASC'  },
                  groupField:this.myGroupField
               });
              
               break;
              
            default:
               break;
           
         }
        
         //判断是否需要分组
         if(this.needGroup){
            this.view = new Ext.grid.GroupingView({
               forceFit:true,
               groupTextTpl:this.myGroupTextTpl
            })
         }

            this.store = this.ds;  
            // 生成分页工具栏  
           /* if (this.needPage) {  
                var pagingToolbar = new Ext.PagingToolbar( {  
                    displayInfo : true,  
                    displayMsg : '当前记录数: {0} - {1} 总记录数: {2}',  
                    emptyMsg : '没有符合条件的记录',  
                    store : this.ds
                });  
                pagingToolbar.pageSize = 30;  
                this.bbar = pagingToolbar;  
                this.bottomToolbar = this.bbar;  
            }   */
            // 将filter加入grid  
           // this.plugins = filters;  
        }  
    });  

它的用法如下:
首先先引用写好的扩展文件。在页面中把ext核心文件加载后,再建在Ext.ux.grid.SimpleGrid.js文件。
例如:<script src = 'Ext.ux.grid.SimpleGrid.js'></script>
在页面中:


<html>
<head>
<!--引用所有的ext的核心文件 -->
....代码略
<!--引用Ext.ux.grid.SimpleGrid.js文件 -->
....代码略

</head>
<body>
<div id="emp3-grid"><div>
<script language="javascript">
//本例是一个数组grid
                var myGridData = [//数据源
         [1,'01','局长','局级干部……'],
         [2,'02','处长','处级干部……'],
         [3,'03','科长','科长干部……'],
         [4,'04','科员','普通科员……'],
         [5,'05','职员','普通职员……']
      ];
     
      var gridStructure = [//grid的数据结构
      {
         name:"stat_id",
         header:"岗位编号",
         hidden:true
      },{  
         name : 'stat_sn',  
         header : "岗位排序号",  
         width : 50  
      },{  
         name : 'stat_name',  
         header : "岗位名称", 
         width : 130  
      },{
         name:"stat_desc",
         header:"岗位描述",
         width:130

      }]; 
                   var  myUxGrid = new Ext.ux.grid.SimpleGrid({//创建岗位的tab面板信息
         id : 'dept-center-stat-grid',  
         // url : 'getBasicUnits.action', 
         readType:'array', //确定数据源类型的参数
         selectType:'check',
         dataObject:myGridData ,
         defaultSortField : 'stat_sn',  
         // keyField : 'basicUnitNo',  
         structure: gridStructure,    
         width : 700,  
         //height : 600,  
         title : '岗位信息'  ,
         renderTo:'temp3-grid'
      });
</script>
</body>
</html>

分享到:
评论

相关推荐

    EXT简体中文参考手册(PDF&CHM电子档)

    目录 EXT 中文手册 1 EXT简介 3 目錄 3 下载Ext 4 开始! 4 Element:Ext的核心 4 获取多个DOM的节点 5 响应事件 5 使用Widgets 7 ...开始使用Grid 51 ...Step 2: Ext结构的构建 96 Step 3: 创建Tab控制逻辑 97

    Ext 学习中文手册

    Ext官方网站+中文教程 无论你是Ext库的新手,抑或是想了解Ext的人,本篇文章的内容都适合你。... 目 录 EXT 中文手册 1 EXT简介 3 目錄 3 下载Ext 4 ...Step 2: Ext结构的构建 96 Step 3: 创建Tab控制逻辑 97

    EXT 中文帮助手册

    58 练一练 60 动态添加菜单按钮到Toolbar 61 更方便的是 61 下一步是 62 模板(Templates)起步 62 第一步 您的HTML模板 62 第二步,将数据加入到模板中 62 下一步 63 学习利用模板...

    EXT 中文手册

    58 练一练 60 动态添加菜单按钮到Toolbar 61 更方便的是 61 下一步是 62 模板(Templates)起步 62 第一步 您的HTML模板 62 第二步,将数据加入到模板中 62 下一步 63 学习利用模板...

    ExtAspNet_v2.3.2_dll

    -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 ...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 ...

    WebBuilder快速开发平台 v7.3

    WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。...修复IDE代码重构,ServerScript encode方法和grid在特定情况下无法调整列大小等bug。根据最新的web标准调整和升级前后台代码。

Global site tag (gtag.js) - Google Analytics