ExtJS4如何自動產生控制grid的列顯示、隱藏的checkbox

來源:互聯網
上載者:User

由於某種原因,需要做一個控制grid列顯示的checkboxgroup,雖然EXTJS4中的gridpanel內建列表可以來控制列的顯示隱藏,但是有這樣的需求(需要一目瞭然)

下面先

 

接著前幾天做的工作,今天上午完成了定製欄位,思路是在上面的普通查詢或者進階查詢結束以後,獲得了列的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的開銷非常大,變為一次速度真的提升了很多很多~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.