[javascript] view plain copy print?
使用 Extjs 在进行数据库编程经常会遇到 checkbox 的问题(奇怪网上却没有此类文章不知道其他人是怎么解决的,在此贴上我的方法,如有问题或建议,欢迎指正), 比如在数据中的 status 存储的值为 'Y' / 'N' 或者是其他非 true / false 的值, 要求显示在gridPanel 中, 如果不进行转换,显示的时候就会有问题,因为 gridPanel 中的 Checkbox(CheckColumn) 的值默认为只有两种: true / false. 这样的话只要 status 的值不为空, 显示到页面的时候 checkbox 都会自动勾上;
[javascript] view plain copy print?
//下面是修改的步骤:
[javascript] view plain copy print? 1. 解决的办法就是, 修改 checkcolumn.js 中 renderer 方法和onMouseDown方法。修改后的代码如下:
/*!
* 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 扩展类CheckColumn的使用(事件触发)的更多相关文章

  1. ExtJs 扩展类CheckColumn修改源码,支持按条件禁用启用下拉框功能

    长话短说,具体的请看图 需求如图: 修改CheckColumn.js源码,添加鼠标点击改变事件 完整JS脚本 Ext.ns('Ext.ux.grid'); Ext.ux.grid.CheckColum ...

  2. 在自定义TableViewCell类里面添加按钮事件触发不了的一些实践

    我的自定义cell上面有5个控件,分别是一个背景的UIImageView,一个专辑的UIImageView(上面加了一个播放的button),一个专辑名字的UIImageView(上面加了显示标题的U ...

  3. .Net Install类的Install、Commit等事件触发顺序

    .Net Install类的Install.Commit等事件触发顺序 空间   首先是Install其中调用base.Install过程中导致OnBeforeInstallOnAfterInstal ...

  4. NUnit实战,第一个测试类,测试事件触发是否是并行的

    以前测试都是新建一个控制台测试的方式来进行,感觉版本管理啥的非常麻烦.也是非常原始的办法.后来想以前有写过测试单元,不过好久没弄了.Nuget了NUnit后写了正式的第一个测试类. 测试用例: 测试事 ...

  5. Javascript事件触发顺序

    html标签是有子和父的,这个时候就出现了事件触发顺序的问题,比如: <!DOCTYPE html> <html> <head> <style> .fi ...

  6. 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”

    回顾一下“"开篇 -- 知其然,知其所以然"”中的两段代码,第一段虽然只使用1个线程但却也只能处理一个socket,第二段虽然能处理成百上千个socket但却需要创建同等数量的线程 ...

  7. C# (事件触发)回调函数,完美处理各类疑难杂症!

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客! 废话说多了...... 嘿嘿:本篇标题为:C#  (事件触发)回调函数,完美处理各类疑难杂症.个人理解如下:事件触发也就是触 ...

  8. Zendframework 模块加载事件触发顺序。

    模块加载时事件触发的时间顺序: 0.loadModules(ModuleEvent::EVENT_LOAD_MODULES) 1.  loadModule.resolve(ModuleEvent::E ...

  9. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题

    之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...

随机推荐

  1. 20145325张梓靖 《Java程序设计》第4周学习总结

    20145325张梓靖 <Java程序设计>第4周学习总结 教材学习内容总结 何谓继承 继承共同行为 继承基本上就是避免多个类间重复定义共同行为:可把相同的程序代码提升为父类:用关键字 e ...

  2. G-Sensor 8452驱动及相关

    8452是一款G-Sensor芯片,采用I2C跟主芯片通讯,采用中断方式跟操作系统协作.通过内部检测XYZ三个方向的加速度,实现各种应用. (1)原理框图如下: 现在来实现在WINCE中的I2C驱动, ...

  3. The current .NET SDK does not support targeting .NET Core 3.0

    编译错误 Severity Code Description Project File Line Suppression StateError NETSDK1045 The current .NET ...

  4. noip 2018 D1T3 赛道修建

    noip 2018 D1T3 赛道修建 首先考虑二分答案,这时需要的就是对于一个长度求出能在树中选出来的最多的路径条数.考虑到一条路径是由一条向上的路径与一条向下的路径构成,或者仅仅是向上或向下的路径 ...

  5. BZOJ 2594 【WC2006】 水管局长数据加强版

    题目链接:水管局长数据加强版 好久没写博客了…… 上次考试的时候写了一发LCT,但是写挂了……突然意识到我已经很久没有写过LCT了,于是今天找了道题来练练手. 首先,LCT这里不讲.这道题要求支持动态 ...

  6. python 将一个列表乱序

    import random nums = [, , , , , , ] random.shuffle(nums) print(nums)

  7. vue 脚手架(二,项目依赖说明 package.json)

    本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 继续上一篇, 上一篇讲了 vue ...

  8. C#通过WMI读取MAC地址

    该方法依赖WMI的系统服务,该服务一般不会被关闭;但如果系统服务缺失或者出现问题,该方法无法取得MAC地址,需要重启Windows Management Instrumentation服务. publ ...

  9. Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD 第12章总结。

    10.测试文件上传 作者推荐的Paperclip,官方维护组已经不推荐使用deprecated. 推荐使用rails自带的 ActiveStorage. Active Storage: 推进文件上传到 ...

  10. myeclipse6.5使用tomcat7报java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory错

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFact ...