Настраиваемая сортировка по дате не работает, когда мы щелкаем по столбцу сетки, т.е. по щелчку столбца сетки - PullRequest
0 голосов
/ 15 апреля 2019

При загрузке в сетку столбец даты не сортируется, поэтому я написал sorterFn(), называемый настраиваемой сортировкой, и он работает, как и ожидалось. Но когда мы нажимаем на столбец сетки при изменении сортировки, даты сетки не сортируются.

Я пытался написать sortChange(), просматривая событие ExtJS Docx [ Ext.grid.header.Container and Ext.grid.Panel] в слушателе сетки, но само событие sortChange() не вызывается.

Вот пример кода, который я написал для загрузки, который работает как положено.

updateGrid: function(filter) {
    me.store.load();
    if(!Ext.isEmpty(me.getStore().sorters)){
        me.getStore().sorters.clear();
    }

    me.getStore().setSorters([{
        sorterProperty: "CALENDAR_DATE",
        direction: "ASC",
        sorterFn: function (date1, date2) {
            var d1, d2;
            if(me.filterDef.mvValues.filter.frequencyFilter == 
                        DCRDashboardConstants.frequency['Daily']){
                d1 = new Date(date1.data.CALENDAR_DATE).getTime();
                d2 = new Date(date2.data.CALENDAR_DATE).getTime();
            } else if(me.filterDef.mvValues.filter.frequencyFilter == 
                     DCRDashboardConstants.frequency['Weekly']){
                d1 = new Date(date1.data.CALENDAR_DATE.split('-') 
                      [0]).getTime();
                d2 = new Date(date2.data.CALENDAR_DATE.split('-') 
                      [0]).getTime();
                } else {
                    d1 = date1.data.CALENDAR_DATE;
                    d2 = date2.data.CALENDAR_DATE;
                }

                return (d1 > d2) ? 1 : (d1 === d2 ? 0 : -1);
            }
    }]);
}

Так как sorterFn: function (date1, date2) {} будет вызываться только один раз (при загрузке сетки), я написал этот код в слушателе, приведенном ниже, но проблема в том, что даже само по себе не вызывается extjs.

listeners: {
  storeBeforeLoad: function(store) {
  },
  if(!Ext.isEmpty(me.getStore().sorters)){
        me.getStore().sorters.clear();
    }

    me.getStore().setSorters([{
        sorterProperty: "CALENDAR_DATE",
        direction: "ASC",
        sorterFn: function (date1, date2) {
            var d1, d2;
            if(me.filterDef.mvValues.filter.frequencyFilter == 
                        DCRDashboardConstants.frequency['Daily']){
                d1 = new Date(date1.data.CALENDAR_DATE).getTime();
                d2 = new Date(date2.data.CALENDAR_DATE).getTime();
            } else if(me.filterDef.mvValues.filter.frequencyFilter == 
                     DCRDashboardConstants.frequency['Weekly']){
                d1 = new Date(date1.data.CALENDAR_DATE.split('-') 
                      [0]).getTime();
                d2 = new Date(date2.data.CALENDAR_DATE.split('-') 
                      [0]).getTime();
                } else {
                    d1 = date1.data.CALENDAR_DATE;
                    d2 = date2.data.CALENDAR_DATE;
                }

                return (d1 > d2) ? 1 : (d1 === d2 ? 0 : -1);
            }
    }]);
  }

Это событие не вызывается ExtJS. Не могли бы вы помочь мне отсортировать даты сортировки изменения столбца сетки.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Может быть, вы должны использовать sorter в grid columns как:

sorter: {
    sorterFn: 'sorterMethodName'
}

Документация: https://docs.sencha.com/extjs/6.6.0/classic/Ext.grid.column.Column.html#cfg-sorter

0 голосов
/ 16 апреля 2019

В слушателе нет кода storeBeforeLoad, если вы хотите загрузить эту функцию при загрузке магазина, вы можете попробовать это

Ext.create('Ext.data.Store', {
    //rest of configs of your store
    listeners: {
        load: {
            fn: function(store, records, successful, operation, eOpts) {
                //function here
            }

        },
        beforeload: {
            fn: function(store, operation, eOpts) {
                // other function here
            }
        }
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...