由父母进行集会排序

时间:2013-07-23 16:53:51

标签: sorting rally

我需要什么

我想通过Parent字段对网格/存储进行排序,但由于获取的Parent字段是一个对象,因此当我根据Parent属性放置一个分类器时,它无法获取任何记录。即使我添加了一个分拣机功能,它也不会被调用。我正在使用拉力网,不确定这是否有所作为

sorters: [{
    property: 'Parent',
    direction: 'DESC',
    sorterFn: function(one, two) {
        console.log('one',one);
        console.log('two',two); // console never shows these
        return -1;
    }
}]

我尝试了什么

为了绕过显示对象,我在父列中添加了一个渲染器函数。我尝试在列中添加一个doSort,并调用该函数,但是对存储进行排序不会调用我的sorterFn,它只使用属性和方向(类似于无法在上面运行的console.log())

1 个答案:

答案 0 :(得分:0)

以下是可正常运行的自定义应用的示例。关键是将remoteSort的默认storeConfig设置为false!

Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentCls: 'app',

    launch: function() {
        App = this;
        Rally.data.ModelFactory.getModel({
             type: 'PortfolioItem/Feature',
             success: function(model) {
                 App.add({
                     xtype: 'rallygrid',
                     id   : 'grid',
                     model: model,
                     columnCfgs: [
                         'FormattedID',
                         'Name',
                         {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){

                                        v1 = v1.get(field);
                                        v2 = v2.get(field);
                                        console.log('v1',v1);
                                        console.log('v2',v2);
                                        if (!v1 && !v2) {
                                            return 0;
                                        } else if (!v2) {
                                            return 1;
                                        } else if (!v1) {
                                            return -1;
                                        }
                                        return v1.Name.localeCompare(v2.Name);
                                    }
                                });
                            },
                            renderer: function(value, meta, record) {
                                var ret = record.raw.Parent;
                                if (ret) {
                                    return ret.Name;
                                } else {
                                    return record.data.Name;
                                }
                            }
                        }
                    ],
                    storeConfig: {
                        remoteSort: false
                    }
                 });
             }
         });
    }
});