ExtJS の DataGrid で独自のソート処理を適用

Ext.data.SimpleStore の fields の定義で sortType に function を設定することで、独自のソート処理を適用することができる。function は、引数を 1つだけとり、戻り値にソートで比較するための数値を返すようにする。

なお、通常のソート処理は type で指定された型に基づき Ext.data.SortTypes で定義された asXXX(asInt等)が適用される。

また、レコードの同一フィールドの値に数値と文字列を混在させるような場合は、type 指定は auto にするか、設定しないようにする必要がある。

Ext.onReady(function() {
    var data = [
        ['test1', 1],
        ['test2', 11],
        ['test3', 2],
        ['test4', 'ABC'],
        ['test5', 'ABC'],
    ];

    var store = new Ext.data.SimpleStore({
        fields: [
            {name: 'title'},
            {name: 'point', sortType: 
                //文字列の場合は固定値で数値の場合は数値を返す
                function(s) {
                    if(isNaN(s)) {
                        return -1;
                    }
                    return Ext.data.SortTypes.asFloat(s);
                }
            }
        ]
    });
    store.loadData(data);