在登上网格时,日期列没有排序,所以我写了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不会调用此事件。你能帮我解决一下网格列排序变化的日期吗?
监听器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
}
}
}
})
也许你应该在sorter
中使用grid columns
,如:
sorter: {
sorterFn: 'sorterMethodName'
}
文档:https://docs.sencha.com/extjs/6.6.0/classic/Ext.grid.column.Column.html#cfg-sorter