jqGrid 没有在 Date 对象上正确排序

标签 jqgrid

我们在本地模式下使用 jqGrid,作为我们的 ajax 调用的一部分,正在修改 Json 结果,以便将日期转换为有效的 JS 日期对象。问题是这些没有正确排序。

我的 colModel 如下:

       {
            name: 'reservationTime',
            index: 'reservationTime',
            sorttype: 'date'
        }

在大多数情况下,它们是按“顺序”排列的,但第一个是从数据的中间开始的,而中间是从接近开头的记录开始的。

当我单击标题尝试对其进行升序/降序排序时,它根本没有改变。如果我对另一个工作正常的字段进行排序,然后当我按我的日期字段排序时,它将再次进行损坏的排序,但仅此而已。

最佳答案

jqGrid 不支持将 Date 作为比较操作中的 native 数据类型,因此我建议您使用两种方法作为解决方法。

1) 您可以使用sorttype 作为函数。在这种情况下,将使用 Date 参数调用该函数,并且该函数可以返回可以在比较操作中使用而不是 Date 的字符串。例如

sorttype: function (d) {
    if ($.isFunction(d.toISOString)) {
        return d.toISOString();
    }

    return ISODateString(d);
    // see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
    function ISODateString(d) {
        function pad(n) { return n < 10 ? '0' + n : n; }

        return d.getUTCFullYear() + '-'
            + pad(d.getUTCMonth() + 1) + '-'
            + pad(d.getUTCDate()) + 'T'
            + pad(d.getUTCHours()) + ':'
            + pad(d.getUTCMinutes()) + ':'
            + pad(d.getUTCSeconds()) + 'Z'
    }
}

2) 您可以扩展 _compare jqGrid 内部使用的函数来支持 Date 类型。您可以使用我在 this old answer 中描述的技巧.如果使用_compare,代码将是

var oldFrom = $.jgrid.from;

$.jgrid.from = function (source, initalQuery) {
    var result = oldFrom.call(this, source, initalQuery),
        old_compare = result._compare;
    result._compare = function (a, b, d) {
        if (typeof a === "object" && typeof b === "object" &&
                a instanceof Date && b instanceof Date) {
            if (a < b) { return -d; }
            if (a > b) { return d; }
            return 0;
        }
        return _compare.call(this, a, b, d);
    };
    return result;
};

您可以在使用 jqGrid 之前插入代码,就像我在 the demo 上演示的那样.

更新:我发布了the pull request这解决了问题。

关于jqGrid 没有在 Date 对象上正确排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9727075/

相关文章:

jquery - JQGrid editOptions 值不起作用

jquery - jqGrid - 如果父网格页面更改,则重新加载子网格?

jquery - 如何在每个第三表行中设置某些 td 的样式?

jquery - jqgrid 中带有 anchor 和图像的 Showlink 自定义格式化程序

javascript - 如何获取 jqGrid 中显示的行数?

jquery - 在无表 CSS 布局中实现 jqGrid

javascript - Jqgrid 列宽根据其内容

jqgrid - 我正在使用 jqGrid 并希望在调整列宽后保存列宽

jqgrid - 在列中添加图标而不是文本

javascript - jqgrid 搜索下拉列表(选择元素)标签不是值