【问题标题】:Customized Date Sorting is not working when we click on grid column i.e on grid column click当我们单击网格列(即单击网格列)时,自定义日期排序不起作用
【发布时间】:2019-04-15 19:01:05
【问题描述】:

在加入网格时,日期列没有排序,所以我写了sorterFn(),称为自定义排序,它按预期工作。但是当我们在排序更改时单击网格列时,网格日期并没有得到排序。

我已尝试通过查看网格侦听器中的ExtJS Docx [ Ext.grid.header.Container and Ext.grid.Panel] 事件来编写sortChange(),但未调用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


    【解决方案1】:

    监听器storeBeforeLoad里面没有代码如果你想在store加载的时候加载这个函数你可以试试这个

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

    【讨论】:

    • 是的,你是对的。我可以在加载网格时进行排序。每当我在加载后单击特定列(例如:日期列)时,我都会遇到这个问题,然后我无法对日期列进行排序。原因是 me.getStore().setSorters([{ }]) 仅在应用程序启动时被调用,而不是在我们单击特定网格列时调用。所以现在我正在寻找点击该列的排序。请帮我解决这个问题。
    【解决方案2】:

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

    sorter: {
        sorterFn: 'sorterMethodName'
    }
    

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

    【讨论】:

    • 当然,如果在 6.0.2 中可用,我会试试这个并让你知道。感谢您的帮助:)。
    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多