需求:用户在grid的头部点出下拉菜单的时候,想要一次性勾选显示所有的列
重写下 Ext.grid.header.Container 类里面的 function getColumnMenu
Ext.override(Ext.grid.header.Container, {
getColumnMenu: function(headerContainer) {
var menuItems = [],
i = 0,
item,
items = headerContainer.query('>gridcolumn[hideable]'),
itemsLn = items.length,
menuItem;
//此处添加一个item all 勾选全部的
menuItem = new Ext.menu.CheckItem({
text: 'All',
checked: false,
hideOnClick: false,
headerId: 'all',
checkHandler: function(checkItem,checked ){
if(!checked) return
var items = checkItem.up().items.items;
Ext.Array.some(items,function(item,index){
if(index > 0 && Ext.getCmp(item.headerId).hidden){
Ext.getCmp(item.headerId)['show']();
}
})
},
scope: this
});
//push到items里面
menuItems.push(menuItem);
for (; i < itemsLn; i++) {
item = items[i];
menuItem = new Ext.menu.CheckItem({
text: item.menuText || item.text,
checked: !item.hidden,
hideOnClick: false,
headerId: item.id,
menu: item.isGroupHeader ? this.getColumnMenu(item) : undefined,
checkHandler: this.onColumnCheckChange,//此处最好自己再重写下,没
//选中的时候将all的设置为不选中
scope: this
});
menuItems.push(menuItem);
}
// Prevent creating a submenu if we have no items
return menuItems.length ? menuItems : null;
}
});