【问题标题】:JqGrid colMoldel formatter variableJqG​​rid colMoldel 格式化程序变量
【发布时间】:2017-04-18 13:17:18
【问题描述】:

(免费版 jqgrid 4.13.6)

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

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

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

【问题讨论】:

    标签: jquery jqgrid free-jqgrid


    【解决方案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"

    【讨论】:

    • 谢谢!所以,我知道“ $.fn.fmatter ”是 jqgrid 创建的一个 jquery 函数,包含所有预定义的格式化程序?在 $.jqgrid 范围内创建它不应该更正确吗?像 $.jqgrid.fmatter 之类的东西......
    • @Aberel: Any 全局方法会很好。不能说$.jqgrid$.fn.fmatter 一样“更正确”。免费 jqGrid 的目标之一是提供与以前版本的 jqGrid 4.x 的向后兼容性。旧的 jqGrid 使用格式化程序插件(请参阅the commens),我 持有 相同的结构。你可以看到here在jQuery内部注册的其他作用域:$.jqm$.jqDnR$.jqm$.fmatter$.unformat
    【解决方案2】:

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

    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

    【讨论】:

    • Azim,感谢您的解决方案,但我想在大多数情况下使用预定义的格式化程序“日期”,但值是特定字符串的情况除外(即“所有日期”)。所以,我认为奥列格的回答会更好地满足我的需求。问候。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多