带有自定义参数的JqGrid自定义格式化程序

时间:2014-07-09 09:01:18

标签: jqgrid jqgrid-formatter

我对自定义格式化程序有疑问。

我尝试实现的是货币格式,仅适用于服务器发送的区域设置的金额,当未定义或支持区域设置时,将返回英式英语。 像这样:

function currencyFmatter(cellvalue, options, rowdata) {
    return new Intl.NumberFormat([locale, "en-GB"], {minimumFractionDigits: 2, maximumFractionDigits: 2}).format(cellvalue);
}

我的问题是如何将我的变量区域设置传递给格式化程序,我很确定它必须是一种方法,但现在我没有看到它。

由于

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题!有很多方法可以实现您的要求。

1)您可以使用指定数据区域设置的附加信息扩展从服务器返回的输入数据。例如,您可以返回"de-DE:10.000,04"而不是代表"10.000,04"的{​​{1}},其格式为德语区域设置(其中1000.04将用作小数点分隔符,,用作千位分隔符)。它允许您使用.来获取数组cellvalue.split(":")以及数字的区域设置和数字本身

["de-DE", "10.000,04"]

或者,您可以将有关数字区域设置的信息放在输入数据的单独字段中(例如function currencyFmatter(cellvalue, options, rowdata) { var data; if (typeof cellvalue === "string") { data = cellvalue.cellvalue.split(":"); if (data.length === 2) { return new Intl.NumberFormat([data[0], "en-GB"], { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(data[1]); } } return cellvalue; } ),并使用类似numLocale(或rowdata.numLocale的内容,具体取决于输入访问区域设置的JSON数据格式。

2)可能是从服务器返回的所有数据都采用相同的格式。在这种情况下,不是使用相同前缀rowdata[12]前置所有数字的最佳方法。例如,您可以使用附加字段扩展从服务器返回的数据。例如,您可以使用

"de-DE:"

您可以访问{ "total": "12", "page": "1", "records": "12345", "localOfNumbers": "de-DE", "rows" : [ ... ] } 回调中的自定义localOfNumbers字段。这是非常实用的回调。它允许您预处理从服务器返回的数据,然后将由jqGrid处理数据。我建议您阅读the answerthis one以获取更多代码示例。例如,您可以在jqGrid的一些新选项中保存beforeProcessing值(有关详细信息,请参阅the answer)。我们希望为目标选择localOfNumbers。然后你可以做类似以下的事情:

gridLocale

要访问新的beforeProcessing: function (data) { if (typeof data.localOfNumbers === "string") { $(this).jqGrid("setGridParam", {gridLocale: data.localOfNumbers}); } } 选项,您可以使用

gridLocale

3)您可以考虑将有关语言环境的信息保存为列属性,而不是使用一个常见的function currencyFmatter(cellvalue, options, rowdata) { var locale = $(this).jqGrid("getGridParam", "gridLocale"); // this.p.gridLocale } 网格选项。为此,您可以在gridLocale中定义列,如下所示

colModel

也可以在{ name: 'col2', width: 200, formatoptions: { colLocale: "en-IN" }, formatter: function (cellvalue, options, rowdata) { // options.colModel.formatoptions.colLocale get you the value } 内设置formatoptions.colLocale的属性。你可以使用

beforeProcessing

{
    "total": "12",
    "page": "1",
    "records": "12345",
    "localOfColumns": {
        "col2": "de-DE",
        "col5": "en-IN"
    },
    "rows" : [
        ...
    ]
}

我确信可以提出更多方法来实现您的要求。