首页 > 解决方案 > 当我们单击网格列即单击网格列时,自定义日期排序不起作用

问题描述

在加入网格时,日期列未排序,因此我将其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 不调用此事件。您能否帮我对网格列的排序更改日期进行排序。

标签: extjs

解决方案


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
            }
        }
    }
})

推荐阅读