sorting - Ext js按内容排序自定义列

标签 sorting extjs

我在 ext 中有一个带有一些自定义列的网格,我希望能够对此列进行排序 - 我想按照其中显示的内容对其进行排序,但实际上我只是不知道如何为列定义排序器这不会基于 dataIndex - 我尝试使用自定义模型,但我无法让它工作。

{
    text: 'Parent',
    dataIndex: 'Parent',
    renderer: function(value, meta, record) {
        var ret = record.raw.Parent;
        if (ret) {
            return ret.Name;
        } else {
            meta.tdCls = 'invisible';
            return record.data.Name;
        }
    },
    sortable: true
},

最佳答案

您应该能够覆盖 doSort列的方法。这是它的要点。我还创建了一个工作 fiddle ( http://jsfiddle.net/cfarmerga/LG5uA/ )。 fiddle 使用字段的字符串长度作为排序的属性,但当然您可以应用自己的自定义排序逻辑。

var grid = Ext.create('Ext.grid.Panel',{
    //...
    columns: [
        { text: 'name', dataIndex: 'name', sortable: true },
        {
            text: 'Custom',
            sortable : true,
            dataIndex: 'customsort',
            doSort: function(state) {
                var ds = this.up('grid').getStore();
                var field = this.getSortParam();
                ds.sort({
                    property: field,
                    direction: state,
                    sorterFn: function(v1, v2){
                        v1 = v1.get(field);
                        v2 = v2.get(field);
                        return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
                    }
                });
            }
        }
    ]
   //....  
});

关于sorting - Ext js按内容排序自定义列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17795019/

相关文章:

javascript - EXTJS 4 - 网格过滤器或商店过滤器清除商店中的现有过滤器

python - 对多个列表中的值进行排序

javascript - Extjs 如何从 extjs 组合框中删除和撤消列表项

bash - 如何对行组进行排序?

c++ - 如何仅按行排序,而不是 C++ 中的行和/或空格

javascript - ExtJs 5 : Loading Mask in GridView

extjs - 使用 ExtJS 4.x 捕获 CTRL+S 跨浏览器并避免浏览器操作

javascript - Extjs 6.0 - 在没有 cmd 的情况下构建应用程序

Java 8 对对象列表进行排序

ruby - 按连续序列拆分数组