EXT的grid擴展

在javaeye裏面,看到了一篇非常不錯的文章,主要介紹了EXT中的GridPanel的擴展,具體鏈接地址如下

http://www.javaeye.com/topic/155455
看完迫不及待的做了個demo的確好用,攢一下那位兄弟。

其實擴展組件主要有2種寫法:

MyClass = Ext.extend(SuperClass, { /* */ });
Ext.extend(MyClass, SuperClass, { /* */});

例子(採用第一種寫法)完整的js代碼如下:

 

 Ext.namespace("Ext.ux.grid");  
 Ext.ux.grid.SimpleGrid = Ext.extend(Ext.grid.GridPanel, {  
        // 表格結構  
        structure : '',  
        // 獲取數據的URL  
        url : '',  
        // 默認排序字段  
        defaultSortField : '',  
        // 關鍵字段  
        keyField : '',  
        // 是否需要額外的過濾條件,默認爲空  
        externalFilters : '',  
        // 是否需要分頁工具欄,默認爲true 
        needPage : true,   
        frame : true,   
        collapsible : true,   
        animCollapse : true,   
        loadMask : true,   
 
        viewConfig : {  
            forceFit : true 
        },  
 
        // private  
        initComponent : function() {  
            if (this.structure != '') {  
                this.initStructure();  
            }  
 
            Ext.ux.grid.SimpleGrid.superclass.initComponent.call(this);  
 
            if (!this.selModel) {  
                new Ext.grid.RowSelectionModel( {  
                    singleSelect : true 
                });  
            }  
        },  
 
        // private  
        initEvents : function() {  
            Ext.grid.GridPanel.superclass.initEvents.call(this);  
 
            this.getStore().load( {  
                params : {  
                    start : 0,  
                    limit : 20  
                }  
            });  
 
            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的三個組件: filters,column和record,根據structure將這三個組件創建出來  
            for (var i = 0, len = this.structure.length;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',  
                        // 類型爲日期則生成格式爲xxxx-xx-xx  
                        renderer : c.type == 'date' 
                                ? Ext.util.Format.dateRenderer('Y-m-d')  
                                : Ext.grid.ColumnModel.defaultRenderer  
                    };  
                }  
                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 filters = new Ext.ux.grid.GridFilters(oFilters);  
            // 生成表格數據容器  
            var record = Ext.data.Record.create(oRecord);  
            var reader = new Ext.data.JsonReader( {  
                totalProperty : "totalCount",  
                root : "result",  
                id : this.keyField  
            }, record);  
            this.ds = new Ext.data.Store( {  
                proxy : new Ext.data.HttpProxy( {  
                    url : this.url  
                }),  
                reader : reader,  
                sortInfo : {  
                    field : this.defaultSortField,  
                    direction : 'ASC' 
                },  
                remoteSort : true 
            });  
            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;  
            }  
        }  
    });  
Ext.reg('simpleGrid', Ext.ux.grid.SimpleGrid); 

這個代碼可以單獨作爲一個文件Ext.ux.grid.MyCustomGrid.js在html引入。

 

調用的test.js代碼:

 

Ext.onReady(function(){
 
  var structure = [ {  
   name : 'basicUnitNo',  
   header : "No.",  
   width : 50  
  }, {  
   name : 'basicUnitName',  
   header : "基本單位名稱",  
   width : 130  
  },{  
   name : 'test',  
   header : "No1",  
   hidden:true,
   width : 50  
  }];  
  
 var grid = new Ext.ux.grid.SimpleGrid( {  
  id : 'basicUnitList-grid',  
  url : 'getBasicUnits.action',  
  defaultSortField : 'basicUnitNo',  
  keyField : 'basicUnitNo',  
  structure: structure,  
  //el : 'listForm',  
  width : 1000,  
  height : 500,  
  title : '基本單位列表' 
 });  

 var viewPort = new Ext.Viewport({
      layout: 'border',
      items: [grid]
 });

});

 

test.html文件關鍵內容:

  <script type="text/javascript" src="Ext.ux.grid.MyCustomGrid.js"></script>
 <script type="text/javascript" src="test.js"></script>

 

運行效果截圖如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章