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 Animation实现CSS3动画示例介绍
Aug 14 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
JavaScript父子窗体间的调用方法
Mar 31 Javascript
原生js三级联动的简单实现代码
Jun 07 Javascript
Javascript+CSS3实现进度条效果
Oct 28 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
Nov 09 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
详解Vue.use自定义自己的全局组件
Jun 14 Javascript
JavaScript如何判断input数据类型
Feb 06 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
Jul 28 Javascript
JS实现简易日历效果
Jan 25 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
德生S2000电路分析
2021/03/02 无线电
ThinkPHP php 框架学习笔记
2009/10/30 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
运动会通讯稿500字
2014/02/20 职场文书
党员岗位承诺书
2014/03/25 职场文书
温馨提示标语
2014/06/26 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
法学专业求职信范文
2015/03/19 职场文书
小学生手册家长意见
2015/06/03 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书