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 相关文章推荐
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
js获取url参数代码实例分享(JS操作URL)
Dec 13 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 Javascript
javascript输出AscII码扩展集中的字符方法
Dec 26 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
React Form组件的实现封装杂谈
May 07 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
微信小程序实现下拉框功能
Jul 16 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
介绍几个array库的新函数 php
2006/12/29 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
Python 的描述符 descriptor详解
2016/02/27 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python下载微信公众号相关文章
2019/02/26 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
python获取Linux发行版名称
2019/08/30 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
python线程信号量semaphore使用解析
2019/11/30 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
天猫精选:上天猫,就够了
2016/09/21 全球购物
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
大学军训感想
2014/02/12 职场文书
对祖国的寄语大全
2014/04/11 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
个人借款协议书范本
2014/11/17 职场文书
2014年党委工作总结
2014/11/22 职场文书
捐款通知怎么写
2015/04/24 职场文书
学校教师培训工作总结
2015/10/14 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android