【问题标题】:Extjs 4.2.2 - Default sorter logic runs instead of custom sorterExtjs 4.2.2 - 默认排序器逻辑运行而不是自定义排序器
【发布时间】:2015-05-27 13:55:21
【问题描述】:

在 ExtJs 4.2.2 上,我需要覆盖某些列的默认排序器并使其按绝对值 (Math.abs) 排序。

当我调试它时,我进入 doSort() 并获得正确的存储和方向(asc,desc),但由于某种原因它不执行 rthe sorterFn() - 并运行默认排序器(我知道它会导致没有任何东西打印到控制台,客户端的行为是默认的)

{
            itemId:  someId,
            //header: 'Abs. Change',


            menuDisabled: false,
            dataIndex: 'AbsChange',

            sortable: true,
            renderer: this.absChangeLabelRenderer,
            width: 95,
            align: 'right',

            doSort: function (state) {
                debugger;
                var ds = this.up('tablepanel').store;
                var field = this.getSortParam();
                ds.sort({
                    property: field,
                    direction: state,
                    sorterFn: function (v1, v2) {
                        debugger;
                        console.log("value1 is {0}, value2 is {1}", v1, v2);

                        debugger;
                        v1 = Math.abs(v1.get(field));
                        v2 = Math.abs(v2.get(field));
                        // transform v1 and v2 here
                        return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
                    }
                });
            }               
        }

【问题讨论】:

    标签: sorting extjs datagrid extjs4.2


    【解决方案1】:

    您应该在模型的字段定义中使用sortType 配置,即返回用于排序的值的函数。

    示例配置:

    fields: [
        // ... other fields ...
        {
            name: 'AbsChange',
            sortType: function(value) {
                return Math.abs(value);
            }
        }
    ]
    

    【讨论】:

    • 我的问题是我的商店已经有分拣机,它覆盖了我上面的代码:) - 无论如何,这个答案很整洁
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多