ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox


Posted in Javascript onMay 02, 2014

由于某种原因,需要做一个控制grid列显示的checkboxgroup,虽然EXTJS4中的gridpanel自带列表可以来控制列的显示隐藏,但是有这样的需求(需要一目了然)

下面先上图

ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox 

接着前几天做的工作,今天上午完成了定制字段,思路是在上面的普通查询或者高级查询结束以后,获得了列的fields,columns等信息,然后交给一个处理函数 makeCustomMadePanel,该函数用来生成checkboxgroup,生成的时候给它加上一个事件,原本以为checkbox会有类似于check的事件,结果API看了看貌似只有个change事件可以用,MD。。

下面贴下自己写的 makeCustomMadePanel函数。。用来根据grid的列自动生成checkboxgroup(整个grid的标头内容等信息均从后台得到,不管后台发来一个什么表,都能生成一个checkboxgroup来控制列的隐藏显示)

参数分别是gridpanel在reconfigure的时候用到的fields和columns,期中的var t=grid_a.columnManager.headerCt.items.get(th.itemId);是关键。。这句用来获得grid_a的列信息。。貌似在api中查不到。网上找了几中方法都不适合。又不想给每个列一个ID。这是在stackoverflow.com/上找到的。。http://stackoverflow.com/questions/20791685/extjs-4-how-do-i-hide-show-grid-columns-on-the-fly

function makeCustomMadePanel(fields,cl) 
{ var x=cusMadePanel.getComponent('custom'); 
//console.log(cusMadePanel.getComponent('custom')); 
for(var i=0;i<fields.length;i++) 
{ 
x.add( 
{ 
xtype : 'checkboxfield', 
boxLabel : cl[i].header, 
inputValue : fields[i].name, 
checked:true, 
itemId:i, 
name : 'custom', 
listeners : { 
change : function(th, value, oldValue,eop) { 
var t=grid_a.columnManager.headerCt.items.get(th.itemId); 
if(t.isVisible()){ 
t.setVisible(false); 
} 
else{ 
t.setVisible(true); 
} 
//grid_a.columns[3].setVisible(false); 
}} 
} 
); 
} 
}

在给出customMadePanel
Ext.define('customMadePanel', { 
extend : 'Ext.form.Panel', 
title : '定制字段', 
collapsible : true, 
items : [ { 
itemId:'custom', xtype : 'checkboxgroup', 
fieldLabel : '选择字段', 
columns : 6, 
items : [] 

}] 
//collapsed:true, 
}); 
var cusMadePanel=new customMadePanel();

我这种做法的不足也很明显,makeCustomMadePanel函数中的循环生成checkbox组件太耗时了,38个组件足足花了好几秒。。用户体验肯定不好。。

并且目前是在每次查询完之后都根据查询的结果生成一遍。。。我再想想好的解决办法

今天对makeCustomMadePanel做了优化,生成组件的速度与先前相比提升非常明显!

function makeCustomMadePanel(fields,cl) cusMade=1; 
var x=cusMadePanel.getComponent('custom'); 
//console.log(cusMadePanel.getComponent('custom')); 
var fie=[]; 
for(var i=0;i<fields.length;i++) 
{ 
//x.add( 
var temp= 
{ 
xtype : 'checkboxfield', 
boxLabel : cl[i].header, 
//inputValue : fields[i].name, 
checked:true, 
itemId:i, 
name : 'custom', 
listeners : { 
change : function(th, value, oldValue,eop) { 
var t=grid_a.columnManager.headerCt.items.get(th.itemId); 
//console.log(t.isVisible()); 
//console.log('break'); 
if(t.isVisible()){ 
t.setVisible(false); 
} 
else{ 
t.setVisible(true); 
} 
//console.log(t.isVisible()); 
//var t1=grid_a.columnManager.headerCt.items.get(th.itemId); 
//console.log(t1); 
//grid_a.columns[3].setVisible(false); 
}} 
}; 
//console.log(temp); 
fie.push(temp); 
} 
//console.log(fie); 
x.add(fie);

思路就是先循环组好需要生成的组件对象,然后一次add,每一次add的开销非常大,变为一次速度真的提升了很多很多~
Javascript 相关文章推荐
一个JS小玩意 几个属性相加不能超过一个特定值.
Sep 29 Javascript
javascript下利用arguments实现string.format函数
Aug 24 Javascript
Javascript简单实现可拖动的div
Oct 22 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
Nov 19 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
jquery Validation表单验证使用详解
Sep 12 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
Jun 22 Javascript
javascript 广告移动特效的实现代码
Jun 25 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
react实现换肤功能的示例代码
Aug 14 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
ExtJS4如何给同一个formpanel不同的url
May 02 #Javascript
ExtJS4 表格的嵌套 rowExpander应用
May 02 #Javascript
用json方式实现在 js 中建立一个map
May 02 #Javascript
jquery操作checkbox实现全选和取消全选
May 02 #Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 #Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
May 01 #Javascript
jquery等待效果示例
May 01 #Javascript
You might like
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python实现树形打印目录结构
2018/03/29 Python
如何基于python操作excel并获取内容
2019/12/24 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
详解python polyscope库的安装和例程
2020/11/13 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
软件测试笔试题
2012/10/25 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
外贸销售员求职的自我评价
2013/11/23 职场文书
运动会广播稿100字
2014/01/11 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
公司出纳岗位职责
2015/03/31 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
MSSQL基本语法操作
2022/04/11 SQL Server
如何使用python包中的sched事件调度器
2022/04/30 Python