当我们单击网格列时,即单击网格列上的

时间:2019-04-15 19:01:05

标签: extjs

登上网格时,日期列未排序,因此我写了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 :(得分: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
            }
        }
    }
})

答案 1 :(得分:0)

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

sorter: {
    sorterFn: 'sorterMethodName'
}

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