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;
    }
}]

私が試したこと

オブジェクトの表示を回避するために、親列にレンダラー関数を追加しました。列に doSort を追加しようとしましたが、その関数が呼び出されましたが、ストアを並べ替えても sorterFn は呼び出されず、プロパティと方向のみが使用されます (上記の実行に失敗した console.log() と同様)。

4

1 に答える 1

0

適切に動作するカスタム App の例を次に示します。重要なのは、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 に答える