最终用户如何清除网格列的排序?
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);
}
});
我使用 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);
}
});