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 相关文章推荐
for 循环性能比较 提高for循环的效率
Mar 19 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
jQuery子属性过滤选择器用法分析
Feb 10 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
ES6的新特性概览
Mar 10 Javascript
JS onkeypress兼容性写法详解
Apr 27 Javascript
Angular 路由route实例代码
Jul 12 Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
vue自定义指令和动态路由实现权限控制
Aug 28 Javascript
nuxt 路由、过渡特效、中间件的实现代码
Nov 06 Javascript
解决await在forEach中不起作用的问题
Feb 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
php获得当前的脚本网址
2007/12/10 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
php搜索文件程序分享
2015/10/30 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
python中下标和切片的使用方法解析
2019/08/27 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python 变量初始化空列表的例子
2019/11/28 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
python 模拟登录B站的示例代码
2020/12/15 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
西安交大自主招生自荐信
2014/01/27 职场文书
英文导游词
2015/02/13 职场文书
同意报考公务员证明
2015/06/17 职场文书
农村老人去世追悼词
2015/06/23 职场文书
优质护理服务心得体会
2016/01/22 职场文书
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL