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 相关文章推荐
ext 列表页面关于多行查询的办法
Mar 25 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
Jun 18 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
jQuery Ajax 全局调用封装实例代码详解
Jun 02 Javascript
JQuery DIV 动态隐藏和显示的方法
Jun 23 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
Dec 25 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 Javascript
微信小程序 checkbox使用实例解析
Sep 09 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
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
js实现表格筛选功能
2017/01/18 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
python中Genarator函数用法分析
2015/04/08 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python小白垃圾回收机制入门
2020/06/09 Python
python字符串的index和find的区别详解
2020/06/20 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
物流合作计划书
2014/01/10 职场文书
学校安全教育制度
2014/01/31 职场文书
广告语设计及教案
2014/03/21 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
React中的Context应用场景分析
2021/06/11 Javascript
浅析Python实现DFA算法
2021/06/26 Python
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
Python中三种花式打印的示例详解
2022/03/19 Python
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技