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

时间:2017-04-18 13:17:18

标签: jquery jqgrid free-jqgrid

(免费版jqgrid 4.13.6)

我有一些datetime列,我将其定义为{... formatter:" date" ......},那没关系。

现在,在某些情况下,根据字段值,我需要使用另一个自定义格式化程序。 格式化器:" date"是jqgrid本地人,我不知道如何解决这种情况。

示例:通常字段值是日期时间,例如" 2017-04-18 10:06",格式化程序可以使用:" date"。但是,在某些情况下,值是一个字符串,例如"所有日期"。只有在这些情况下,格式化程序必须是" myCustomFormatter", 不格式化:"日期",因为我不想修改jqgrid原生" date"能够考虑这种特殊情况。

2 个答案:

答案 0 :(得分:1)

您可以将自定义格式化程序用于以下列。

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

答案 1 :(得分:1)

我建议你检查免费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"