登上网格时,日期列未排序,因此我写了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不调用此事件。您能帮我解决一下网格列排序更改上的日期吗?
答案 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