【问题标题】:Aurelia converted values and dataTablesAurelia 转换的值和数据表
【发布时间】:2017-09-07 11:46:13
【问题描述】:

我在 Aurelia 组件中使用 DataTables jQuery 插件。使用列排序,它很好地排除了带有日期的列。
在此列中,我使用 value-convertet 将 isoString 值转换为 DD.MM.YYYY 日期格式。值转换器的使用会导致错误的日期列排序,但如果我不使用值转换器,一切都会正常工作。不幸的是,我没有找到它无法正常工作的任何原因。

错误的过滤示例:我在18.05.2017 之前看到日期值类似于27.05.2010 的行

数据表初始化:

$('#searchResultsTable').dataTable({
    destroy: true,
    searching: false,
    paging: false,
    orderMulti: false,
    order: [[ 2, "desc" ]],
    dateFormat: 'DD.MM.YYYY'
});

日期值转换器(使用 moment 库):

import * as moment from 'moment';

export class DateFormatValueConverter {
    toView(value: Date, format: string): string {
        if (value) {
            return moment(value).format(format);
        }

        return null;
    }

    fromView(value: string, format: string): Date {
        var isValid = moment(value, format, true).isValid();
        if (value && isValid) {
            return moment(value, format).toDate();
        }

        return null;
    }
}

更新: 使用价值转换器订购

不带 ValueConverter 的订单(按 2017 年价值排序)

【问题讨论】:

  • 当您说使用 ValueConverters 时的顺序是错误 - 它实际上与您不使用它们时的物理顺序相同吗?
  • 我不明白你说的“物理顺序”是什么意思。根据我给出的错误排序示例,如果我不使用 Value Converter
  • 你说使用值转换器时顺序错误,但实际上与不使用时的顺序是一样的吗?
  • 用例子添加图片来提问

标签: date datatable aurelia


【解决方案1】:

数据表的排序机制工作正常 - 恐怕这是您的理解错误。

按降序排序时,以27. 开头的任何内容都将位于顶部,因为它们是“最大的”。在以27 开头的所有日期中,它将按月排序,最大的在前,然后是年。

订单机制没有意识到您正在订购日期,因此我们需要查看自定义排序插件;

https://www.datatables.net/plug-ins/sorting/

特别是 Date-De 插件 - 因为它与您的日期格式匹配;

https://www.datatables.net/plug-ins/sorting/date-de

取自上述页面的示例;

$('#example').dataTable( {
    columnDefs: [
        { type: 'de_datetime', targets: 0 },
        { type: 'de_date', targets: 1 }
    ]
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2017-08-19
相关资源
最近更新 更多