问题描述
|
在列中启用排序后,单击标题会自动对该列进行排序。我想禁止基于单击列标题的排序,但保留通过标题菜单进行的排序。换句话说,对列进行排序的唯一方法是进入标题菜单。有什么想法吗?
解决方法
var contextMenu = new Ext.menu.Menu({
items: [{
id: \'sort-high-to-low\',cls: \'xg-hmenu-sort-asc\',text: \'Sort Ascending within Group\'
},{
id: \'sort-low-to-high\',cls: \'xg-hmenu-sort-desc\',text: \'Sort Descending within Group\'
},\'-\',{
id: \'sort-high-to-low-all\',text: \'Sort All Ascending\'
},{
id: \'sort-low-to-high-all\',text: \'Sort All Descending\'
},{
id: \'heatmap\',cls: \'xg-hmenu-heatmap\',text: \'Open in Heatmap\'
}],listeners: {
scope: this,itemclick: function(item) {
switch (item.id) {
case \'sort-high-to-low\':
Ext.getCmp(\'backtestGrid\').getStore().sort(contextMenu.columnId,\'ASC\');
this.hide();
break;
case \'sort-low-to-high\':
Ext.getCmp(\'backtestGrid\').getStore().sort(contextMenu.columnId,\'DESC\');
this.hide();
break;
case \'sort-high-to-low-all\':
Ext.getCmp(\'backtestGrid\').getStore().clearGrouping();
Ext.getCmp(\'backtestGrid\').getStore().sort(contextMenu.columnId,\'ASC\');
this.hide();
break;
case \'sort-low-to-high-all\':
Ext.getCmp(\'backtestGrid\').getStore().clearGrouping();
Ext.getCmp(\'backtestGrid\').getStore().sort(contextMenu.columnId,\'DESC\');
this.hide();
break;
case \'heatmap\':
heatmapCallback(contextMenu.headerName,contextMenu.columnId);
this.hide();
break;
}
}
}});
, {
xtype: \'gridcolumn\',menuDisabled: true,width: \'75%\'
}
, 我最终根据以下文章构建了自己的上下文菜单。
我如何为extjs网格创建上下文菜单
, 在Ext 6中:
覆盖Ext.grid.column.Column
以在方法onTitleElClick
上设置sortOnClick
属性
我并使用新的配置ѭ5进行控制。
设置enableSortOnClick = false
将禁用标题单击上的排序,但保留标题下拉菜单上的排序功能。
Ext.define(\'App.overrides.ColumnOverride\',{
override: \'Ext.grid.column.Column\',config: {
/** Control sortOnClick at TitleElClick event*/
enableSortOnClick: false,},/**@Overrides*/
onTitleElClick: function(e,t,sortOnClick) {
return this.callParent([e,this.enableSortOnClick && sortOnClick]);
}
});
, http://forums.ext.net/showthread.php?12608-CLOSED-How-to-disable-sorting-by-click-the-header-of-column-in-GridPanel