ExtJs 扩展类CheckColumn的使用(事件触发)
[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}"> </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的使用(事件触发)的更多相关文章
- ExtJs 扩展类CheckColumn修改源码,支持按条件禁用启用下拉框功能
长话短说,具体的请看图 需求如图: 修改CheckColumn.js源码,添加鼠标点击改变事件 完整JS脚本 Ext.ns('Ext.ux.grid'); Ext.ux.grid.CheckColum ...
- 在自定义TableViewCell类里面添加按钮事件触发不了的一些实践
我的自定义cell上面有5个控件,分别是一个背景的UIImageView,一个专辑的UIImageView(上面加了一个播放的button),一个专辑名字的UIImageView(上面加了显示标题的U ...
- .Net Install类的Install、Commit等事件触发顺序
.Net Install类的Install.Commit等事件触发顺序 空间 首先是Install其中调用base.Install过程中导致OnBeforeInstallOnAfterInstal ...
- NUnit实战,第一个测试类,测试事件触发是否是并行的
以前测试都是新建一个控制台测试的方式来进行,感觉版本管理啥的非常麻烦.也是非常原始的办法.后来想以前有写过测试单元,不过好久没弄了.Nuget了NUnit后写了正式的第一个测试类. 测试用例: 测试事 ...
- Javascript事件触发顺序
html标签是有子和父的,这个时候就出现了事件触发顺序的问题,比如: <!DOCTYPE html> <html> <head> <style> .fi ...
- 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”
回顾一下“"开篇 -- 知其然,知其所以然"”中的两段代码,第一段虽然只使用1个线程但却也只能处理一个socket,第二段虽然能处理成百上千个socket但却需要创建同等数量的线程 ...
- C# (事件触发)回调函数,完美处理各类疑难杂症!
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客! 废话说多了...... 嘿嘿:本篇标题为:C# (事件触发)回调函数,完美处理各类疑难杂症.个人理解如下:事件触发也就是触 ...
- Zendframework 模块加载事件触发顺序。
模块加载时事件触发的时间顺序: 0.loadModules(ModuleEvent::EVENT_LOAD_MODULES) 1. loadModule.resolve(ModuleEvent::E ...
- Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...
随机推荐
- linux第四章读书笔记
第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态.多 ...
- Java面试知识点总结及解析
声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个 ...
- Ubuntu16.04下配置pip国内镜像源加速安装【转】
本文转载自:https://blog.csdn.net/yucicheung/article/details/79095742 问题描述 基于国内网速的问题,我们直接pip安装包通常速度非常慢,而且经 ...
- Tomcat灵活配置多项目,多端口,多域名,多虚拟目录
Tomcat的配置都在Tomcat的安装目录的conf文件夹下的server.xml文件 最初内容:(去掉所有注释) <?xml version="1.0" encoding ...
- [nowcoder]contest/172/C保护
C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi) ...
- JS文档DOM
访问指定节点 通过document节点获取 document.getElementById(elementId) document.getElementsByName(elementName) d ...
- Spring Cloud 开发的一些推荐规划
1.提供一个统一的 父 pom 依赖 作用:统一版本与引入必要依赖 2.提供一个模板模型. 作用: 开发人员不必关系具体基础启动项 3.提供一个统一基础配置模型 作用: 开发人员不比太过关注与必 ...
- linux 查看日志最后几行
tail -n 50 wx.log 示例:查看/var/log/boot.log,只显示最后一行.则执行 tail -n 1 /var/log/boot.log tail -n 1000:显示最后1 ...
- jar插件应用
Gson(解析json) 作用:在servlet层中解析json 1:导入jar包 gson-2.2.4.jar 例如:Gson gson = new Gson(); ...
- idea 设置编译快捷键(代替 ctrl+f9)
问题描述 今日在设置项目热部署的时候,无奈就是不会自动编译,不知什么原因. 而编译的话,要么去点小按钮 ,要么使用ctrl + f9,实在不便. 且ctrl + f9目测不能更改. 解决办法 借鉴了关 ...