【问题标题】:Rally grid with custom column renderer sort具有自定义列渲染器排序的 Rally 网格
【发布时间】:2013-07-19 21:24:39
【问题描述】:

背景

当我尝试按使用自定义渲染器的列进行排序时,什么都没有发生 - 它从 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;
        }
    }
},

【问题讨论】:

  • 我建议使用record.get('Parent') 而不是使用record.raw.Parent

标签: sorting rally


【解决方案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;
                    }
                }
            },

【讨论】:

    最近更新 更多