`

ExtJs 扩展类CheckColumn的使用

 
阅读更多
/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns('Ext.ux.grid');
/**
 * @class Ext.ux.grid.CheckColumn
 * @extends Object
 * GridPanel plugin to add a column with check boxes to a grid.
 * <p>Example usage:</p>
 * <pre><code>
// create the column
var checkColumn = new Ext.grid.CheckColumn({
   header: 'Indoor?',
   dataIndex: 'indoor',
   id: 'check',
   width: 55
});
// add the column to the column model
var cm = new Ext.grid.ColumnModel([{
       header: 'Foo',
       ...
    },
    checkColumn
]);
// create the grid
var grid = new Ext.grid.EditorGridPanel({
    ...
    cm: cm,
    plugins: [checkColumn], // include plugin
    ...
});
 * </code></pre>
 * In addition to storing a Boolean value within the record data, this
 * class toggles a css class between <tt>'x-grid3-check-col'</tt> and
 * <tt>'x-grid3-check-col-on'</tt> to alter the background image used for
 * a column.
 */
Ext.ux.grid.CheckColumn = function(config){
    Ext.apply(this, config);
    if(!this.id){
        this.id = Ext.id();
    }
    this.renderer = this.renderer.createDelegate(this);
};
Ext.ux.grid.CheckColumn.prototype ={
    init : function(grid){
        this.grid = grid;
        this.grid.on('render', function(){
            var view = this.grid.getView();
            view.mainBody.on('mousedown', this.onMouseDown, this);
        }, this);
    },
    onMouseDown : function(e, t){
        if(Ext.fly(t).hasClass(this.createId())){
            e.stopEvent();
            var index = this.grid.getView().findRowIndex(t);
            var record = this.grid.store.getAt(index);
            var value = record.data[this.dataIndex];
         switch(value)
         {
             case 'Y':
               value = 'N';
               break;
             case 'N':
               value = 'Y';
               break;
             default:
               value = !value;
         }
            record.set(this.dataIndex, value);
        }
    },
    renderer : function(v, p, record){
     p.css += ' x-grid3-check-col-td'; 
     return String.format('<div class="x-grid3-check-col{0} {1}">&nbsp;</div>',   v=='Y' || v== true ? '-on' : '', this.createId());
    },
    
    createId : function(){
        return 'x-grid3-cc-' + this.id;
    }
};
// register ptype
Ext.preg('checkcolumn', Ext.ux.grid.CheckColumn);
// backwards compat
Ext.grid.CheckColumn = Ext.ux.grid.CheckColumn;
 
//下面这个是页面文件也贴出来,当时做这个模块的时候也差了不少资料,与人分享,才会快乐。

<%@ page language="java" pageEncoding="UTF-8" %> <%@ include file="/WEB-INF/views/common/head.jsp" %> <title></title> <!-- Extjs导入 --> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/common_viewport.css" type="text/css"> </link>

<script type="text/javascript" src="${pageContext.request.contextPath}/js/list_viewport.js"> </script> <script type="text/javascript" src="${pageContext.request.contextPath}/extjs/ux/CheckColumn.js"> </script>

<style type="text/css"> .store-info { background: url('${pageContext.request.contextPath}/imgs/store-info.gif') left top no-repeat; } body { font-size: 12px; } </style> <script type="text/javascript"> Ext.onReady(function(){ var adminColumn = new Ext.grid.CheckColumn({ header: '系统管理员维护?', dataIndex: 'sfxtwh', width: 100 }); var studentUpdColumn = new Ext.grid.CheckColumn({ header: '学生可改?', dataIndex: 'sfkxg', id:'_student_update', width: 80 }); var studentAllowBlankColumn = new Ext.grid.CheckColumn({ header: '学生必填?', dataIndex: 'sfbt', id:'_student_allow', width: 80 }); //列表数据对象 var dataStore = new Ext.data.JsonStore({ autoDestroy: true, //autoLoad:true, pruneModifiedRecords: true, root:'dataList', totalProperty:'totalCount', url: contextPath+'/xg/zdsz/xszdszAction.do?method=getXszdszByPage&tableName=XSZHGL_XSXXB', fields: ["id",'columnname',"sfkxg","sfxtwh","sfbt"] }); dataStore.load(); //列表 var dataGrid = new Ext.grid.EditorGridPanel({ stripeRows: true, autoScroll: true, trackMouseOver: true, border: false, loadMask: true, sm: checkboxModel, plugins: [adminColumn, studentUpdColumn, studentAllowBlankColumn], //其他代码省略,这里是grid的listeners属性的配置代码 listeners : { 'afteredit' : function(e) { alert(e.value); Ext.Ajax.request({ url : 'updateUser.action', params : { filedName : e.field, fieldValue : e.value, userId : e.record.data.userId }, success : function() { //alert('ok'); }, failure : function() { Ext.Msg.show({ title : '错误提示', msg : '修改数据发生错误,操作将被回滚!', fn : function() { e.record.set(e.field, e.originalValue); }, buttons : Ext.Msg.OK, icon : Ext.Msg.ERROR }); } }); } }, //列模型 cm:new Ext.grid.ColumnModel([ { header:'字段名称', sortable:true, dataIndex:'columnname', width:200 },adminColumn, studentUpdColumn, studentAllowBlankColumn ]), //数据 store: dataStore, bbar: new Ext.PagingToolbar({ pageSize: 15, store: dataStore, displayInfo: true, beforePageText: '第', afterPageText: '页,共 {0} 页', displayMsg: '当前为第<font style="color:red">{0} - {1}</font> 条记录,共<font style="color:red">{2}</font> 条记录', emptyMsg: "没有找到相关信息" }) }); //添加列表 dataPanel.add(dataGrid); initDataTbar([_save, "-", _refresh, "-", _condition]); /*事件控制*****************************/ //刷新 getRefreshBtn().on('click', function(){ dataStore.reload(); }); //实例化主界面(添加所有控件后) var mianFrame = new MianFrame(); setNavigate("学工管理 >> 学生基本信息设置"); }); </script> </head> <body> <input type="hidden" id='qx' value='${qxlx}'><input type="hidden" id='mkid' value='${mkid}'> <table width="100%" height='100%'> <tr> <td align="center" valign="middle"> <div id='loadDiv' style="font-size:12px;"> <img width='50' height='50' src='${pageContext.request.contextPath}/imgs/login-load.gif'>数据加载中,请稍后 . . . </div> </td> </tr> </table> </body> </html>

 
//如果修改的数据要及时的与后台交互的话,可以给editGridPanel添加afterEdit事件,如上面的js文件,但要提前修改CheckColumn的中onMouseDown方法,如下:
onMouseDown : function(e, t) {
        if (t.className && t.className.indexOf('x-grid3-cc-' + this.id) != -1) {
            e.stopEvent();
            var index = this.grid.getView().findRowIndex(t);
            var cindex = this.grid.getView().findCellIndex(t);
            var record = this.grid.store.getAt(index);
            var value = record.data[this.dataIndex];
   
            var field = this.grid.colModel.getDataIndex(cindex);
            var e = {
                grid : this.grid,
                record : record,
                field : field,
                originalValue : record.data[this.dataIndex],
                value : !record.data[this.dataIndex],
                row : index,
                column : cindex,
                cancel : false
            };
            if (this.grid.fireEvent("validateedit", e) !== false && !e.cancel) {
                delete e.cancel;
                record.set(this.dataIndex, !record.data[this.dataIndex]);
                this.grid.fireEvent("afteredit", e);
            }
            
        }
    }
已上资料希望对你有帮助!!!分享快乐!(下图是系统实现的效果)
 
 


分享到:
评论

相关推荐

    EXTJS扩展例子集

    这个"EXTJS扩展例子集"显然是一个包含EXTJS3.0相关扩展组件的资源包,旨在帮助开发者理解和学习如何使用这些扩展。 在EXTJS中,扩展(Extensions)通常是指对框架原有功能的增强或定制,它们可以是新的组件、小部件...

    ExtJs:收集基于ExtJs扩展的一些控件

    这些文件对于理解和使用扩展控件至关重要,因为它们提供了运行和定制这些控件所需的必要素材。 综上所述,这个压缩包集合了多种基于ExtJs的扩展控件,为开发者提供了丰富的工具来构建功能丰富的Web应用。通过深入...

    extjs扩展教程 网页版

    extjs扩展教程 extjs扩展教程extjs扩展教程

    ExtJs DWR扩展 DWRProxy、DWRTreeLoader、DWRGridProxy

    在标题和描述中提到的“ExtJs DWR扩展”是指将这两者结合使用,以增强数据交换和UI更新的能力。 1. **DWRProxy**: DWRProxy是ExtJs中的一个类,它作为DWR和ExtJs之间的桥梁,使得ExtJs可以利用DWR的远程调用功能。...

    Extjs树分页组件扩展

    "Extjs树分页组件扩展"就是为了解决这一问题而设计的,它通过扩展TreeLoader和PagingToolbar,实现了在树形组件中进行分页加载的效果。 **TreeLoader的扩展** TreeLoader是ExtJS中负责异步加载树节点的类。在原生...

    ExtJS扩展包(ExtJsExtenderControl)

    ExtJS扩展包(ExtJsExtenderControl)是针对ExtJS框架的一个增强工具,它扩展了ExtJS的功能,特别是在与.NET框架结合使用时,为开发者提供了更丰富的控件和功能。ExtJS是一个流行的JavaScript库,用于构建富客户端...

    extjs扩展包

    本文是extjs的扩展包,可以在页面中插入图片,把这个js文件放入相应的目录下,extjs就是引用这个类型,就可以插入图片

    extjs扩展标记

    EXTJS扩展标记是一种技术,它允许开发者在JSP页面中使用类似于HTML标签的方式来操作EXTJS组件,极大地简化了EXTJS应用的开发过程。EXTJS是一个强大的JavaScript库,用于构建富客户端Web应用程序,提供了丰富的用户...

    dreamweaver Extjs 扩展插件语法提示

    dreamweaver Extjs 扩展插件语法提示 在dreamweaver中可以显示Extjs语法提示,提升开发效率,用起来很方便 分.zxp和.mxp两种扩展 cc2015,cs6均可用。 扩展安装需要到用Adobe Extension Manager,请自行在网上百度,...

    extjs扩展年度控件,EXTJS里的时间控件的年度重写

    然而,有时开发人员可能需要对这些控件进行自定义,以满足特定业务需求,比如在本例中,我们需要扩展EXTJS的时间控件以实现“年度”选择的功能。 EXTJS的Date Picker默认提供了日、月、年的选择,但可能并不完全...

    extjs扩展的月份控件

    同事写的extjs月份扩展控件,可以直接调用,用于只要求显示月份不显示日期的项目

    ExtJS 组件扩展

    在使用ExtJS进行组件扩展时,开发人员常常会遇到一些典型的问题: 1. **没有封装**:这通常是由于开发者对ExtJS机制理解不足所致。此类问题的核心在于未充分利用ExtJS框架的组件生命周期管理能力,导致编写出的代码...

    Extjs Grid 扩展实例

    在ExtJS中,我们可以通过`Ext.extend()`或使用`Ext.define()`方法创建一个新的类,该类继承自现有类并可以添加新的属性和方法。对于ExtJS Grid,我们可能要扩展其基础配置,比如自定义列、行渲染器、编辑器,甚至是...

    Extjs扩展DateTimeField时间初始化及点击日期显示Bug

    在EXTJS这个强大的JavaScript框架中,开发者经常遇到各种控件的使用问题,特别是涉及到日期时间选择的组件。本文将深入探讨“Extjs扩展DateTimeField时间初始化及点击日期显示Bug”这一主题,帮助开发者解决实际开发...

    extjs vtype 扩展正则

    Extjs表单VTYPE扩展,方便验证!

    extjs多选 下拉框扩展

    例如,`MultiSelect.js`可能就是这样一个扩展类,它提供了多选、复选框等特性。 在`MultiSelect.js`中,我们可以预期有以下关键部分: 1. **配置项**:增加`multiSelect`配置项,允许用户开启或关闭多选功能。另外...

    extjs My97使用 extjs时间 extjs日期使用

    extjs4.0结合My97DatePicker4.7版本使用 使用简单 方便 解决extjs中日期控件不能显示时间的问题 下载后将其放到extjs目录的examples下 直接运行date.html即可 extjs4.0版本 4.0以前的版本没有测试过 如果有4.0版本...

    ExtJS扩展:垂直页签tabPanel

    1. **扩展TabPanel类**:创建一个新的类,继承自Ext.TabPanel,并在扩展类中添加或覆盖必要的方法和配置,如`layout`配置项可能需要设置为自定义的垂直布局。 2. **自定义布局**:创建一个新的布局管理器,可能命名...

    Extjs4.1 小例子(适合extjs初学者学习使用)

    通过这些小例子,你可以了解如何使用ExtJS 4.1来创建用户界面,包括布局管理、组件系统、数据绑定、事件处理等核心概念。 描述中提到的".直接导入myeclipse即可",意味着这些示例代码是用Eclipse的MyEclipse插件...

    使用OOP的方式扩展ExtJS UI组建 - 更新版

    本篇文章将深入探讨如何使用OOP的方式来扩展ExtJS UI组件,并结合更新版的实现方法进行讨论。 首先,理解ExtJS的基础是至关重要的。ExtJS提供了一套完整的组件模型,包括窗口(Window)、面板(Panel)、表格(Grid...

Global site tag (gtag.js) - Google Analytics