最终用户如何清除网格列的排序?

How does an end user clear the sorting for a grid column?

我使用 ExtJs 6.6.0 Classic。 grid组件支持multi-column排序(我用的是remoteSort: true, remoteFilter: true)。每当用户单击列 header 时,该列将成为排序依据列表中的第一列。但是我找不到最终用户应该如何清除列的排序。通过列 header 可用的上下文菜单没有“清除排序”选项。

另见这个厨房水槽 example

我觉得我错过了什么。从 header 继承的列有一个 sortClearText 配置,但我找不到使用它的地方(我想也许有一些配置可以用来添加 Clear Sort 菜单项到列上下文菜单)。

我可以添加一个按钮来执行清除商店排序的操作,作为最后的手段,但我不喜欢它。

有没有一种简单的方法可以通过 Extjs 组件配置为网格列添加清除排序选项?

谢谢

我也没找到,不过你可以用下面的覆盖:

Ext.define('overrides.grid.header.Container', {
    override: 'Ext.grid.header.Container',
    
    getMenuItems: function() {
        var me = this,
            menuItems = [],
            hideableColumns = me.enableColumnHide ? me.getColumnMenu(me) : null;
 
        if (me.sortable) {
            menuItems = [{
                itemId: 'ascItem',
                text: me.sortAscText,
                iconCls: me.menuSortAscCls,
                handler: me.onSortAscClick,
                scope: me
            }, {
                itemId: 'descItem',
                text: me.sortDescText,
                iconCls: me.menuSortDescCls,
                handler: me.onSortDescClick,
                scope: me
            }, {
                itemId: 'dropSortItem',
                text: me.sortClearText,
                //iconCls: me.menuSortDescCls, // Your icon
                handler: me.onSortClearClick,
                scope: me
            }];
        }
 
        if (hideableColumns && hideableColumns.length) {
            if (me.sortable) {
                menuItems.push({
                    itemId: 'columnItemSeparator',
                    xtype: 'menuseparator'
                });
            }
 
            menuItems.push({
                itemId: 'columnItem',
                text: me.columnsText,
                iconCls: me.menuColsIcon,
                menu: hideableColumns,
                hideOnClick: false
            });
        }
 
        return menuItems;
    },
    
    onSortClearClick: function() {
        var menu = this.getMenu(),
            activeHeader = menu.activeHeader,
            store = this.up('grid').getStore();
        store.getSorters().each(function(sorter) {
            if(sorter.initialConfig.property == activeHeader.dataIndex) {
                store.getSorters().remove(sorter)
            }       
        }, this);
    }
});