简体   繁体   English

Ext JS 3-在单击网格列标题时禁用排序

[英]Ext JS 3 - Disable sort on click of a grid column header

When sort is enabled in a column, clicking the header automatically sorts on that column. 在列中启用排序后,单击标题会自动对该列进行排序。 I want to disallow sorting based on a click of the column's header but retain sorting through the header's menu. 我想禁止基于单击列标题的排序,但保留通过标题菜单进行的排序。 In other words, the only way to sort the column is by entering the header menu. 换句话说,对列进行排序的唯一方法是进入标题菜单。 Any thoughts? 有什么想法吗?

{
  xtype: 'gridcolumn',
  menuDisabled: true,
  width: '75%'
}
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;
        }
    }
}});

In Ext 6: 在Ext 6中:

Override Ext.grid.column.Column to condition the sortOnClick attribute on the method onTitleElClick 覆盖Ext.grid.column.Column调节所述sortOnClick上该方法属性onTitleElClick

I and used a new configuration enableSortOnClick to control this. 我并使用了新的配置enableSortOnClick来控制它。

Setting enableSortOnClick = false disables sort on header click but maintains sort functionality on header dropdown menu. 设置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]);
    }
});  

I ended up building my own context menu based on the following post. 我最终根据以下文章构建了自己的上下文菜单。

How i can create context menu for extjs grid 我如何为extjs网格创建上下文菜单

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM