Search code examples
javascriptextjsextjs4.1extjs-stores

extjs4.1 sort a store based on user defined criteria


Can someone help me to sort the store based on a user defined criteria?

Ext.define('Role', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'role_id', type: 'int'},
        {name: 'role_name',  type: 'string'}
    ]
})

The role_name returned are admin,user,read-only,super I would like to sort it as

read-only,user,admin,super.


Solution

  • You can sort it using the sort() method as follow:

    Ext.define('Role', {
        extend: 'Ext.data.Model',
        fields: [
            {name: 'role_id', type: 'int'},
            {name: 'role_name',  type: 'string'}
        ]
    })
    
    var store = Ext.create('Ext.data.Store', {
        model: 'Role',    
        data: [             // non-sorted data
            [ 1, 'user' ],
            [ 2, 'super' ],
            [ 3, 'read-only' ],
            [ 4, 'admin' ]                
        ]
    });
    
    // sort the store
    store.sort([{
        sorterFn: function(v1, v2) {
            var order = ['read-only', 'user', 'admin', 'super'],
                v1o   = order.indexOf(v1.get('role_name')),
                v2o   = order.indexOf(v2.get('role_name'));           
    
            return v1o < v2o ? -1 : 1;; 
        }
    }]);
    
    console.log(store.data);
    

    ​You can see it working here: http://jsfiddle.net/lontivero/wGc2D/4/

    Good luck!