在列中启用排序后,单击标题会自动对该列进行排序。我想禁止基于列标题的排序进行排序,但保留通过标题菜单的排序。换句话说,对列进行排序的唯一方法是进入标题菜单。有什么想法吗?
答案 0 :(得分:1)
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',
cls: 'xg-hmenu-sort-asc',
text: 'Sort All Ascending'
},{
id: 'sort-low-to-high-all',
cls: 'xg-hmenu-sort-desc',
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;
}
}
}});
答案 1 :(得分:1)
{
xtype: 'gridcolumn',
menuDisabled: true,
width: '75%'
}
答案 2 :(得分:0)
我最终根据以下帖子构建了自己的上下文菜单。
答案 3 :(得分:0)
在Ext 6中:
重写Ext.grid.column.Column
,以在方法sortOnClick
上设置onTitleElClick
属性
我并使用新配置enableSortOnClick
对此进行控制。
设置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, t, this.enableSortOnClick && sortOnClick]);
}
});
答案 4 :(得分:-1)