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 相关文章推荐
jquery DOM操作 基于命令改变页面
May 06 Javascript
ExtJs grid行 右键菜单的两种方法
Jun 19 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
Oct 09 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
使用jQueryMobile实现滑动翻页效果的方法
Feb 04 Javascript
js实现页面a向页面b传参的方法
May 29 Javascript
Angular2.js实现表单验证详解
Jun 23 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
Sep 11 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 Javascript
js this 绑定机制深入详解
Apr 30 Javascript
javascript读取本地文件和目录方法详解
Aug 06 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读注册表
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php去除重复字的实现代码
2011/09/16 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
用Python实现一个简单的线程池
2015/04/07 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
英语文学专业学生的自我评价
2013/10/31 职场文书
毕业自我鉴定
2013/11/05 职场文书
党校学习自我鉴定
2014/02/24 职场文书
作文评语集锦
2014/12/25 职场文书
2016年元旦致辞
2015/08/01 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
一篇文章带你复习java知识点
2021/06/28 Java/Android
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android