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 URL参数判断,确定菜单样式
May 31 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
Mar 13 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
Bootstrap实现input控件失去焦点时验证
Aug 04 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
Nov 09 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
JS实现div模块的截图并下载功能
Oct 17 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
Vue中使用vue-i18插件实现多语言切换功能
Apr 25 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 Javascript
如何使用vue3打造一个物料库
May 08 Vue.js
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制作简单的内容采集器的原理分析
2008/10/01 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php中动态修改ini配置
2014/10/14 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
Jquery Ajax请求代码(2)
2011/01/07 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
Python列表list数组array用法实例解析
2014/10/28 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
python mysql中in参数化说明
2020/06/05 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
python 利用toapi库自动生成api
2020/10/19 Python
联想德国官网:Lenovo Germany
2018/07/04 全球购物
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
3分钟演讲稿
2014/04/30 职场文书
党员教师一句话承诺
2014/05/30 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
工作失职检讨书500字
2014/10/17 职场文书
社区活动总结
2015/02/04 职场文书
学校教学管理制度
2015/08/06 职场文书
2016继续教育研修日志
2015/11/13 职场文书