Grid的使用实例

1、Ext2.0目录结构

1.1、adapter目录,负责将里面提供第三方底层库(包括Ext自带的底层库)映射为Ext所支持的底层库ext-xxxx-adapter.js

 1.1.1、/ext/ext-base.js 必备基础引用***
 
1.2、example目录Ext2.0应用实例

1.3、resource目录 Ext UI资源文件目录,如CSS、图片文件都存放在这里面。

 1.3.1、/css/ext-all.css 必备基础引用***
 
1.4、ext-all-debug.js 无压缩的Ext全部的源码(用于调试)

1.5、ext-all.js 压缩后的Ext全部源码,加速执行效率,必备基础引用***

1.6、source目录 Ext js源文件目录,用于查看js的函数实现和注释,其中的locale目录是Ext国际化可以引入的资源文件

 1.6.1、/locale/ext-lang-<%=request.getLocale().toString()%>.js  必备基础引用***

---------------------------------------------------

2、 Grid的使用实例(包含分页和httpProxy)

2.1、在jsp文件中引入js、css文件,文件的引入是有顺序的

 <script type='text/javascript' src='<%=strContextPath%>/dwr/util.js'></script>

 <link rel="stylesheet" type="text/css" href="<%=strContextPath%>/script/ext/resources/css/ext-all.css" >
 <script type="text/javascript" src="<%=strContextPath%>/script/ext/adapter/ext/ext-base.js"></script>
 <script type="text/javascript" src="<%=strContextPath%>/script/ext/ext-all.js"></script>
 <script type="text/javascript" src="<%=strContextPath%>/script/ext/source/local/ext-lang-<%=request.getLocale().toString()%>.js"></script>
 <script type="text/javascript" src="<%=strContextPath%>/script/ext/newbee/page_grid.js"></script>
 
 util.js 引入此文件为了使用$操作符根据ID获取页面的组件等系列工具函数,例如:$('local-states').value
 ext-all.css Ext用到的css式样
 ext-base.js Ext必备基础引用,它和ext-all.js、ext-lang-<%=request.getLocale().toString()%>.js文件的引入必须保持现有的顺序
 ext-all.js Ext主文件,如果要在调试模式下使用可以替换为ext-all-debug.js
 ext-lang-<%=request.getLocale().toString()%>.js Ext国际化文件的动态写法,根据浏览器的语言设定引入不同的国际化文件
 page_grid.js 自定义Grid的js文件
 
2.2、添加grid-div

 <div id="grid-newbee"></div>

 

2.3、编写 page_grid.js 文件的注意事项

 2.3.1、Ext.data.Record.create()创建常用属性
 
  name : String
  The name by which the field is referenced within the Record. This is referenced by, for example the dataIndex property in column definition objects passed to Ext.grid.ColumnModel
  
  mapping : String
  (Optional) A path specification for use by the Ext.data.Reader implementation that is creating the Record to access the data value from the data object. If an Ext.data.JsonReader is being used, then this is a string containing the javascript expression to reference the data relative to the record item's root. If an Ext.data.XmlReader is being used, this is an Ext.DomQuery path to the data item relative to the record element. If the mapping expression is the same as the field name, this may be omitted.
  
  type : String
  (Optional) The data type for conversion to displayable value. Possible values are
  
  auto (Default, implies no conversion)
  string
  int
  float
  boolean
  date
  
  dateFormat : String
  (Optional) A format String for the Date.parseDate function.
  
  var TopicRecord = Ext.data.Record.create([
      {name: 'title', mapping: 'topic_title'},
      {name: 'author', mapping: 'username'},
      {name: 'totalPosts', mapping: 'topic_replies', type: 'int'},
      {name: 'lastPost', mapping: 'post_time', type: 'date', dateFormat: 'Y-m-d H:i:s'},
      {name: 'lastPoster', mapping: 'user2'},
      {name: 'excerpt', mapping: 'post_text'}
  ]);
  
 2.3.2、autoExpandColumn参数值引用的是ColumnModel中的ID而不是dataIndex
 
 var grid = new Ext.grid.GridPanel({
        store: store,
  sm : sm,
        columns: [
   new Ext.grid.RowNumberer(),
   sm,
            {header: '编号', width: 10, sortable: true, dataIndex: 'verNumber'},
            {id:'strName',header: '内容', width: 75, sortable: true, dataIndex: 'strName'}, // 指定id是为了在autoExpandColumn属性中使用
   {header: '课程', width: 10, sortable: true, dataIndex: 'CourseName'},
            {header: '题型', width: 10, sortable: true, dataIndex: 'QuestionTypeName'},
   {header: '难度', width: 10, sortable: true, dataIndex: 'DifficultyName'},
            {header: '区分度', width: 10, sortable: true, dataIndex: 'DistinguishName'},
   {header: '要求', width: 10, sortable: true, dataIndex: 'DemandName'},
            {header: '编辑', width: 10, sortable: true, dataIndex: 'ModifierName'},
            {header: '编辑日期', width: 15, sortable: true, renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s'), dataIndex: 'dtModifyTime'}],
        stripeRows: true,
        autoExpandColumn: 'strName', // 这里引用的是列id,而不是dataIndex
        height:Ext.get("grid-newbee").getHeight(),
        width:Ext.get("grid-newbee").getWidth(),
        title:'试题列表',
        bbar: new Ext.PagingToolbar({
            pageSize: newBeePageSize,
            store: store,
            displayInfo: true,
            displayMsg: '显示 {0} - {1}, 共 {2} 条',
            emptyMsg: '没有数据需要显示'
        }),
  tbar: new Ext.PagingToolbar({
            pageSize: newBeePageSize,
            store: store,
            displayInfo: true
        })
    });

2.4、提供数据的servlet,web.xml配置

2.5、改进Ext执行效率

 2.5.1、修改 ext-base.js 文件,把BLANK_IMAGE_URL : "http:/"+"/extjs.com/s.gif"改为BLANK_IMAGE_URL:"../../resources/images/default/s.gif"
 
 2.5.2、自定义字符需要国际化请使用java方式:在主jsp文件中定义js变量,并使用内嵌java代码给变量赋值,然后在其他js代码中引用这些变量。

 

附page_grid.js代码:

 

/*
 * Ext JS Library 2.0.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 *
 * http://extjs.com/license
 */

Ext.onReady(function(){

    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
 
    // example of custom renderer function
    function change(val){
        if(val > 0){
            return '<span style="color:green;">' + val + '</span>';
        }else if(val < 0){
            return '<span style="color:red;">' + val + '</span>';
        }
        return val;
    }

    // example of custom renderer function
    function pctChange(val){
        if(val > 0){
            return '<span style="color:green;">' + val + '%</span>';
        }else if(val < 0){
            return '<span style="color:red;">' + val + '%</span>';
        }
        return val;
    }

    // create the data store
 var myQuestion = Ext.data.Record.create([
     {name: 'verNumber'},
  {name: 'strName'},
  {name: 'CourseName'},
  {name: 'QuestionTypeName'},
  {name: 'DifficultyName'},
  {name: 'DistinguishName'},
  {name: 'DemandName'},
  {name: 'ModifierName'},
     {name: 'dtModifyTime', type: 'date', dateFormat: 'Y-m-d H:i:s'} 
 ]);
 
 var myJsonReader = new Ext.data.JsonReader(
  {totalProperty: 'totalProperty', root: 'root'},
  myQuestion
 );
 
 var myHttpProxy = new Ext.data.HttpProxy({url:myUrl});
 
    var store = new Ext.data.Store({proxy: myHttpProxy, reader: myJsonReader});
 
 // 每页显示的记录数
 var newBeePageSize = 10;
 
 // 查询条件
 store.on('beforeload', function() {
   store.baseParams = {
  filterText:filterText01
   };
 });   
    store.load({params:{start:0,limit:newBeePageSize}});

    // create the Grid
 var sm = new Ext.grid.CheckboxSelectionModel({singleSelect:true}) ;
    var grid = new Ext.grid.GridPanel({
        store: store,
  sm : sm,
        columns: [
   new Ext.grid.RowNumberer(),
   sm,
            {header: '编号', width: 10, sortable: true, dataIndex: 'verNumber'},
            {id:'strName',header: '内容', width: 75, sortable: true, dataIndex: 'strName'}, // 指定id是为了在autoExpandColumn属性中使用
   {header: '课程', width: 10, sortable: true, dataIndex: 'CourseName'},
            {header: '题型', width: 10, sortable: true, dataIndex: 'QuestionTypeName'},
   {header: '难度', width: 10, sortable: true, dataIndex: 'DifficultyName'},
            {header: '区分度', width: 10, sortable: true, dataIndex: 'DistinguishName'},
   {header: '要求', width: 10, sortable: true, dataIndex: 'DemandName'},
            {header: '编辑', width: 10, sortable: true, dataIndex: 'ModifierName'},
            {header: '编辑日期', width: 15, sortable: true, renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s'), dataIndex: 'dtModifyTime'}],
        stripeRows: true,
        autoExpandColumn: 'strName', // 这里引用的是列id,而不是dataIndex
        height:Ext.get("grid-newbee").getHeight(),
        width:Ext.get("grid-newbee").getWidth(),
        title:'试题列表',
        bbar: new Ext.PagingToolbar({
            pageSize: newBeePageSize,
            store: store,
            displayInfo: true,
            displayMsg: '显示 {0} - {1}, 共 {2} 条',
            emptyMsg: '没有数据需要显示'
        }),
  tbar: new Ext.PagingToolbar({
            pageSize: newBeePageSize,
            store: store,
            displayInfo: true
        })
    });
 
 // grid单击事件
 grid.addListener('rowClick', rowClick);
 function rowClick(grid, rowIndex, e) {
     var record = grid.getStore().getAt(rowIndex);   //Get the Record
     var fieldName = grid.getColumnModel().getDataIndex(2); //Get field name
     var data = record.get(fieldName);
  newQuestionId = data;
     //Ext.MessageBox.alert('show','当前选中的数据是'+data);
 }
 
 // 选择模式重定义,单选模式下,点击列头选择框不执行全选
 Ext.grid.CheckboxSelectionModel.prototype.onHdMouseDown = function(e, t){
        if(t.className == 'x-grid3-hd-checker'){
            e.stopEvent();
   if(this.singleSelect==false){
    var hd = Ext.fly(t.parentNode);
             var isChecked = hd.hasClass('x-grid3-hd-checker-on');
             if(isChecked){
                 hd.removeClass('x-grid3-hd-checker-on');
                 this.clearSelections();
             }else{
                 hd.addClass('x-grid3-hd-checker-on');
                 this.selectAll();
             }
   }
        }
    }

    grid.render('grid-newbee');
 
 <!-- ------------ 宽度、高度自适应 ----------------->
 window.οnresize=function(){
  
        grid.setWidth(0);
        grid.setWidth($("grid-newbee").offsetWidth);
  grid.setHeight(0);
  grid.setHeight($("grid-newbee").offsetHeight);
  
 };
 
 $("right").οnresize=function(){
    
    grid.setWidth(0);
          grid.setWidth($("grid-newbee").clientWidth);
    grid.setHeight(0);
    grid.setHeight($("grid-newbee").clientHeight);
    
 };


 
 
 <!-- ------------ search and reset ----------------->
 Ext.get('searchBtn').on('click', function(){
  filterText01 = $('local-states').value;
  
  store.on('beforeload', function() {
    store.baseParams = {
   filterText:filterText01
    };
  });
  store.load({params:{start:0, limit:newBeePageSize}});
  grid.getView().refresh();
 });
 
 Ext.get('resetBtn').on('click', function(){
  
  filterText01 = $('local-states').value = '';
  
  store.on('beforeload', function() {
    store.baseParams = {
   filterText:filterText01
    };
  });
  store.load({params:{start:0, limit:newBeePageSize}});
  grid.getView().refresh();
 
 });
 
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值