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

时间:2011-06-25 13:16:46

标签: javascript extjs

在列中启用排序后,单击标题会自动对该列进行排序。我想禁止基于列标题的排序进行排序,但保留通过标题菜单的排序。换句话说,对列进行排序的唯一方法是进入标题菜单。有什么想法吗?

5 个答案:

答案 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)

我最终根据以下帖子构建了自己的上下文菜单。

How i can create context menu for extjs grid

答案 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)