Results 1 to 2 of 2

Thread: How do I do a custom sort for a store in ExtJS?

  1. #1
    Sencha User
    Join Date
    Jun 2012
    Posts
    9

    Default How do I do a custom sort for a store in ExtJS?

    I currently have the code below that overrides the sort for all stores. What I need to do is create a sort for an individual store. How do I do that?

    Code:
    Ext.override(Ext.data.Store, {
        // override
        createSortFunction: function (field, direction) {
            direction = direction || "ASC";
            var directionModifier = direction.toUpperCase() == "DESC" ? -1 : 1;
            var sortType = this.fields.get(field).sortType;
    
            //create a comparison function. Takes 2 records, returns 1 if record 1 is greater,
            //-1 if record 2 is greater or 0 if they are equal
            return function (r1, r2) {
    
                var v1;
                var v2;
    
                if (field == 'Registered') {
                    v1 = sortType(r1.data['AircraftNeedsRegistered']);
                    v2 = sortType(r2.data['AircraftNeedsRegistered']);
    
                    if (r1.data['AircraftNeedsRegistered'])
                        r1.data['Register'] = !r1.data['Register'];
    
                    if (r2.data['AircraftNeedsRegistered'])
                        r2.data['Register'] = !r2.data['Register'];
                    
                    //store.getAt(rowIndex).data['Registered'] = true;
                }
                else {
                    v1 = sortType(r1.data[field]);
                    v2 = sortType(r2.data[field]);
                }
    
                // To perform case insensitive sort
                if (v1.toLowerCase) {
                    v1 = v1.toLowerCase();
                    v2 = v2.toLowerCase();
                }
    
                return directionModifier * (v1 > v2 ? 1 : (v1 < v2 ? -1 : 0));
            };
        }
    What I want to implement is something like this:

    Code:
    function AircraftStore() {
    return new Ext.data.JsonStore(Ext.apply({
        url: AVRMS.ROOT_CONTEXT + "/ssl/json/general/GetAircraftByOwnerId.aspx",
        idProperty: 'OwnerOid',
        baseParams: { OwnerOid: 0 },
        fields: ['AircraftOid', 'NNumber', 'Make', 'Model', 'Seats', 'RegistrationType', 'Airworthy', 'IsFaaAirport', 'AirworthyString', 'IsFaaAirportString', 'Airport', 'AircraftNeedsRegistered', 'Register'],
        sort: function (field, direction) {
            return customSort(field, direction);
        }
    }));
        };
    
    function customSort(field,direction) {
        //What do I put here?
    }

  2. #2
    Sencha User sword-it's Avatar
    Join Date
    May 2012
    Location
    Istanbul
    Posts
    1,335

    Default use "sortInfo config"

    Hi Gfinzer,

    If you want sort individual Store use sortInfo config of Store class like -
    Code:
    sortInfo:{
        field:'fieldName',
        direction:'ASC'// or 'DESC' (case sensitive for local sorting)
    }
    For more info read API - http://docs.sencha.com/ext-js/3-4/#!...e-cfg-sortInfo
    sword-it.com, Sencha Developer House in Turkey - Istanbul University Technopark Suite 204.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •