使用自定义列渲染器排序的拉力网格

时间:2013-07-19 21:24:40

标签: sorting rally

背景

当我尝试按照我使用自定义渲染器的列进行排序时,没有任何反应 - 它会将ASC中的排序更改为DESC,但是数据的顺序永远不会改变。我假设这是因为没有定义如何对使用自定义渲染器操作的数据进行排序,但我似乎无法找到将分类器或排序函数添加到列的方法。

目标

我正在制作一个我希望按父列排序的网格。我想对它进行排序,使得父项出现在它的任何子项上方(父项是汇总,子项是特征)。

对于要素,请将父名称放在父列中。对于Rollups,将其自身的名称放在父列中,并为其添加一个设置

的类
display: none;

然后,您可以轻松地将其排序并让父母出现在儿童上方

代码

{
    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;
        }
    }
},

1 个答案:

答案 0 :(得分:1)

对于rallygrid配置,请确保将remoteSort的属性(默认情况下为true)设置为false。然后,这是列的配置:

            {dataIndex: 'Parent', name: 'Parent', 
                doSort: function(state) {
                    var ds = this.up('grid').getStore();
                    var field = this.getSortParam();
                    console.log('field',field);
                    ds.sort({
                        property: field,
                        direction: state,
                        sorterFn: function(v1, v2){
                            console.log('v1',v1);
                            console.log('v2',v2);
                            if (v1.raw.Parent) {
                                v1 = v1.raw.Parent.Name;
                            } else {
                                v1 = v1.data.Name;
                            }

                            if (v2.raw.Parent) {
                                v2 = v2.raw.Parent.Name;
                            } else {
                                v2 = v2.data.Name;
                            }

                            return v1.localeCompare(v2);
                        }
                    });
                },
                renderer: function(value, meta, record) {
                    var ret = record.raw.Parent;
                    if (ret) {
                        return ret.Name;
                    } else {
                        meta.tdCls = 'invisible';
                        return record.data.Name;
                    }
                }
            },