ExtJS4 自己主动生成控制grid的列显示、隐藏的checkbox
因为某种原因。须要做一个控制grid列显示的checkboxgroup,尽管EXTJS4中的gridpanel自带列表能够来控制列的显示隐藏,可是有这种需求(须要一目了然)
以下先上图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVjb2Rlcndvcmxk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
接着前几天做的工作。今天上午完毕了定制字段,思路是在上面的普通查询或者高级查询结束以后,获得了列的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的开销非常大,变为一次速度真的提升了非常多非常多~
ExtJS4 自己主动生成控制grid的列显示、隐藏的checkbox的更多相关文章
- FineUI Grid 缓存列显示隐藏状态
当列表字段过多时,需要隐藏掉一些,但是再次打开页面又显示出来了,FineUI没有提供缓存功能,那么自己动手,打开[ext-part2.js]找到 “if (Ext.grid.column.RowNum ...
- python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)
一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...
- 前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏
一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...
- extjs4权限管理,actioncolumn列显示隐藏或禁用
//隐藏getClass: function(v, meta, rec) { if ( someCondition ) { return 'x-hidden' } }//加入其他样式getClass: ...
- vue+elementUI表格列显示隐藏遇到bug
在最近的项目中,有需求要做到根据字段显示列,原来以为简单的v-if可以解决. 在开发的过程中遇到问题, <el-table ref="multipleTable" :data ...
- DataGrid列显示隐藏配置
1.列右键事件 private void data1_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { ContextMenu ...
- React Native 控制一个component的显示隐藏
// 首先在constructor里: this.state = { visible: false } // 然后在点击事件设置: this.setState({ visible: t ...
- 多个div独立控制其显示/隐藏
今天要说一个神奇的html标签op,静态页下可以配合jquery分别控制每个层的显示/隐藏切换. 如果用动态中使用,用文章id做区分就可以了. <html> <head> &l ...
- EXTJS4.2 控件之Grid 根据数据源某列数据不同绑定不同的控件setEditor
Grid 根据数据源某列数据不同绑定不同的控件,例如:文本框和下拉框 主要代码写在grid的 plugins: [rowEditing],下面这是定义的rowEditing对象,这里面的要定义成 E ...
随机推荐
- TOJ 4105 Lines Counting(离线树状数组)
4105. Lines Counting Time Limit: 2.0 Seconds Memory Limit: 150000K Total Runs: 152 Accepted Ru ...
- BZOJ 3462 DZY Loves Math II ——动态规划 组合数
好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...
- node系列
http://www.cnblogs.com/zhongweiv/p/nodejs.html
- 分配问题(cogs 740)
«问题描述: 有n件工作要分配给n个人做.第i 个人做第j 件工作产生的效益为c[i][j] .试设计一个将n件工作分配给n个人做的分配方案,使产生的总效益最大. «编程任务: 对于给定的n件工作和 ...
- 洛谷P1279 字串距离
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...
- CF 148D Bag of mice【概率DP】
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes Promblem descriptio ...
- [CODEVS1130]数字反转
题目描述 Description 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零. 这是一道水题.我必须 ...
- soap1.1与soap1.2区别
- netbean下搭建mariadb数据库
本人的操作系统Manjaro 最新版,mariadb版本为10.1.1,使用netbeasn开发java WEB,搭建过程如下: 1.安装数据库 pacman -S mariadb 2.启动数据库服务 ...
- VIM使用技巧5
查找并手动替换.例如有如下一段文字: We' re waiting for content before the site can go live If you are content with th ...