You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ext JS 6.2.0:如何将网格列表过滤器项按升序排列?

解决Ext.grid.filters.filter.List选项未按自然升序排列的问题

针对Rating列过滤器选项按加载顺序而非数值升序排列的问题,有以下几种可行方案:

1. 手动指定排序后的选项数组

如果Rating的可选值是固定的(1-5),直接在过滤器配置中传入预先排序好的选项数组即可:

{
    text: 'Rating',
    dataIndex: 'rating',
    filter: {
        type: 'list',
        // 数值升序的选项列表
        options: [1, 2, 3, 4, 5]
        // 若需显示文本与值对应,可使用对象数组并确保已排序
        // options: [{text: '1星', value: 1}, {text: '2星', value: 2}, {text: '3星', value: 3}, {text: '4星', value: 4}, {text: '5星', value: 5}]
    }
}

2. 动态获取数据后排序再赋值

如果选项是从Store或后端接口动态加载的,在数据加载完成后对选项数组进行数值排序,再设置给过滤器:

// 假设用于获取Rating选项的Store为ratingOptionStore
ratingOptionStore.load({
    callback: function(records) {
        // 将Store记录转换为过滤器所需的选项格式,并按value数值升序排序
        const sortedOptions = records.map(record => ({
            text: record.get('displayText'),
            value: record.get('ratingValue')
        })).sort((a, b) => a.value - b.value);
        
        // 获取目标Grid和Rating列的过滤器
        const targetGrid = Ext.ComponentQuery.query('#yourGridId')[0];
        const ratingFilter = targetGrid.getColumnManager().getColumnByDataIndex('rating').getFilter();
        
        // 更新过滤器选项
        ratingFilter.setOptions(sortedOptions);
    }
});

3. 配置过滤器的sortFn自定义排序逻辑

利用List过滤器的sortFn配置项,自定义选项的排序规则,确保按数值升序排列:

{
    text: 'Rating',
    dataIndex: 'rating',
    filter: {
        type: 'list',
        // 自定义排序函数,按选项的value数值升序排列
        sortFn: (optionA, optionB) => {
            // 若value是字符串类型的数字,需先转为数值再比较
            const valA = parseInt(optionA.value, 10);
            const valB = parseInt(optionB.value, 10);
            return valA - valB;
        }
    }
}

注意事项

如果Rating的值以字符串形式存储(例如"1"、"2"),排序时必须先转换为数值类型,否则会出现字符串排序的异常(如"10"排在"2"之前)。

内容的提问来源于stack exchange,提问作者StSch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:12:37