在ExtJs 4.1网格中,基于另一列对一列进行排序

7
我正在使用ExtJs 4.1框架。我有一个仅显示一列(名称)的网格。该网格与一个包含两个字段(名称和排序顺序)的存储关联。存储中的“名称”字段与网格的“名称”列相关联。我想根据存储中的SortOrder字段中可用的值对名称列进行排序。我如何实现这样的逻辑。
谢谢
3个回答

20

还有一个更简单的解决方案:

...
columns: [{
    header: '名称',
    dataIndex: '名称',
    sortable: true,
    getSortParam: function() {
        return '排序顺序';
    }
...
}]
...

因此,您可以只重写getSortParam()方法(该方法由doSort()使用),而无需覆盖doSort()。


这对我也解决了这个问题,但是你引用的另一个字段(在这种情况下为SortOrder)有它自己的列,你可能需要给它一个不同的数据索引并覆盖它的getSortParam函数。虽然不太确定为什么... - Sash
3
非常好,因为这是公共方法。谢谢! - Leonardo Spina

4
你的意思是这样的吗:
...
columns: [{
    header: 'Name',
    dataIndex: 'Name',
    sortable: true,
    doSort: function(state){
        var ds = this.up('tablepanel').store;
        ds.sort({
            property: 'SortOrder',
            direction: state
        });
    }
    ....    
}]

谢谢...不知道为什么他们没有将“doSort”放入Ext.grid.column.Column的文档中。 给你点赞。 - T1000
1
请注意,Ext.grid.column.Column.doSort()是一个用于内部处理的私有方法,因此通常不建议我们使用。因此,在文档中它是不可见的,除非您专门搜索它或启用查看私有函数的功能。 - Yetti

0

在标题单击时的另一种方法。

columns: [
    {
        header: 'Name',
        dataIndex: 'Name',
        listeners: {
            headerclick: function() {
                var store = this.up('grid').getStore();
                store.sort({
                        property: 'SortOrder',
                        direction: this.sortState
                    });
            }
        }
    }
 ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接