JqG​​rid colModel 格式化程序变量

JqGrid colMoldel formatter variable

(jqgrid 4.13.6 免费版)

我有一些日期时间列,我将其定义为 {... formatter:"date" ... },没关系。

现在,在某些情况下,根据字段值,我需要使用另一个自定义格式化程序。 由于formatter:"date"是jqgrid原生的,不知道怎么解决这种情况

示例:通常字段值为日期时间,例如“2017-04-18 10:06”,这对于格式化程序来说是可以的:"date"。但是,在少数情况下,该值是一个字符串,例如 "ALL DATES"。只有在这些情况下,格式化程序必须是 "myCustomFormatter", NOT formatter:"date",因为我不想修改 jqgrid 本机 "date" 函数来考虑这种特殊情况。

您可以为列使用自定义 格式化程序,如下所示。

formatter: function(cellvalue, options, rowObject) {
    var date = new Date(cellvalue);

    if(isNaN(date.getFullYear())){
        return cellvalue;
    } else {
        return date.getDate()  + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
    }
}

DEMO

我建议您检查免费 jqGrid 代码的 the lines,看看自定义格式化程序和预定义格式化程序(如 formatter: "date")的调用之间存在差异的地方:

...
} else if (isFunction(cm.formatter)) {
    v = cm.formatter.call(ts, cellval, opts, rwdat, act);
} else if ($.fmatter) {
    v = $.fn.fmatter.call(ts, cm.formatter, cellval, opts, rwdat, act);
} else {
...

这意味着要从您需要的自定义格式化程序中调用 formatter: "date",只需使用

 formatter: function (cellValue, options, rowObject, action) {
     return $.fn.fmatter.call(this, "date", cellValue, options, rowObject, action);
 },
 unformat: function (cellValue, options, cell) {
     return $.unformat.date.call(this, cellValue, options.formatoptions);
 }

以上代码只是将调用转发给格式化程序日期。参见 https://jsfiddle.net/OlegKi/gq5hxtnc/

您最后需要做的是修改上述自定义格式化程序的代码,并非总是将调用转发给 formatter: "date",但是,例如,如果输入不是字符串 "ALL DATES".