0

我需要的

我想按 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;
    }
}]

我试过的

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

4

1 回答 1

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
                    }
                 });
             }
         });
    }
});
于 2013-07-24T16:40:21.977 回答