如何使用两个参数自定义排序网格?

8ljdwjyq  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(151)

我想对网格进行自定义排序,以便具有负id的数据/项始终放在顶部,其余的应根据所选列(dataIndex)进行排序
我曾尝试在columns中使用sortFn,但不知道如何继续。如果我返回该值,那么它不会影响按name排序(在本例中)。

{
        text: 'Name',
        zwidth: 150,
        autoSizeColumn: true,
        sortable: true,
        hideable: true,
        dataIndex: 'name',
        sorter: {
            sorterFn: function (a, b) {
                if (a.id < 0 || b.id < 0)
                // how to put them in first two positons and rest sort by 'name'
            }
        }
    }

整个例子都可以在这里找到。
https://fiddle.sencha.com/#view/editor&fiddle/3kqi
我正在使用ExtJS 6。

wtlkbnrh

wtlkbnrh1#

根据文档,您需要从分拣机功能返回:

  • 0,如果a和e1d1e在顺序方面应视为相同,
  • 1如果a应在b之后,
  • -1,如果a应在b之前。

因此,您需要处理不同的情况,例如:

sorterFn: function (a, b) {
    if (a.id < 0 && b.id > 0) {
        return -1;
    }
    if (a.id > 0 && b.id < 0) {
        return 1;
    }    
    return a.data.name == b.data.name ? 0 : a.data.name > b.data.name ? 1 : -1;
}

如果单击Name列,这将导致您的Fiddle出现预期行为。但是,如果再次单击进行降序排序,则负数ID将位于末尾,正数ID将在开头。
如果您想以不同的方式处理降序,可以在分拣机功能中使用this.getDirection(),结果是ASCDESC。您可以基于此设置不同的逻辑。

相关问题