当我们点击网格列,即在网格列单击时,自定义日期排序不起作用

问题描述 投票:0回答:2

在登上网格时,日期列没有排序,所以我写了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
2个回答
0
投票

监听器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
            }
        }
    }
})

0
投票

也许你应该在sorter中使用grid columns,如:

sorter: {
    sorterFn: 'sorterMethodName'
}

文档:https://docs.sencha.com/extjs/6.6.0/classic/Ext.grid.column.Column.html#cfg-sorter

© www.soinside.com 2019 - 2024. All rights reserved.