按日期时间排序,然后按日期分组

时间:2018-01-29 08:58:43

标签: sorting extjs

我想按日期时间值排序,并按日期字符串分组。

我在石斑鱼上找到了sortProperty

  

如果希望对groupFn返回的组字符串以外的其他内容进行排序,则可以设置此配置。这与普通property上的Ext.util.Sorter具有相同的作用。

所以我尝试了以下内容,只对日期进行了正确排序:

grouper:{
    sortProperty: 'StartDate',
    property: 'StartDateOnly',
    direction: 'ASC'
},

我尝试了以下方法,只对时间进行了正确排序:

grouper:{
    sortProperty: 'StartDate',
    property: 'StartDateOnly',
    direction: 'ASC'
},
sorters: [{
    property: 'StartDate',
    direction: 'ASC'
}]

你可以在这里试试:

https://fiddle.sencha.com/#view/editor&fiddle/2cei

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

问题是您对string类型进行了排序,但是您通过更改您的sencha小提琴上的代码date,如下所示:

Ext.application({
    name : 'Fiddle',
launch : function() {
    var mdl = Ext.define('', {
        extend: 'Ext.data.Model',
        fields: [{
            /** @field {date} StartDate with format: Y-m-d H:i */
            name: 'StartDate',
            type: 'date',
            dateFormat: 'Y-m-d H:i'
        },{
            name: 'StartDateOnly',
            type: 'date', // <= here before it was 'string'
            convert: function(v,rec) {
                return Ext.Date.format(rec.get('StartDate'), 'D d.m.Y');
            }
        }]
    });

...

然后您运行,您可以看到日期StartDateOnly组现在按ASC排序。
之后,您可以date格式检索此数据并将其转换为string
但是如果你在string进行排序,那么你将永远像现在这样在2月1日 问题是它在一周的日子里按字母顺序排序。
按顺序:星期五,星期六,星期四。

答案 1 :(得分:1)

Sencha支持没有提供完整的解决方案,但在我的路上帮助了我一点。他们找到了如何“修复”手头的问题,并告诉我将StartDateOnly列的数据类型更改为date,但这个修复程序都没有被证明是普遍的,也没有任何意义解决了这个问题。 。但它显示了一些潜在的相关性,这有助于我深入研究问题并找到一个通用的解决方案。

我想说这个问题是ExtJS中的一个错误,但我正在等待Sencha对此的确认。我必须找到引入错误的确切行。

问题描述:

当在石斑鱼上设置sortProperty并且在商店中添加至少一个分拣机时,石斑鱼的“变换”功能被设置为第一个分拣机的“变换”功能(否则,它为空)。 / p>

解决方案:

您可以通过向grouper配置明确添加正确的排序类型来手动覆盖石斑鱼上的transform函数:

grouper:{
    sortProperty: 'StartDate',
    property: 'StartDateOnly',
    transform: Ext.data.SortTypes.asDate,
    direction: 'ASC'
},