【问题标题】:JSON encoded formatter function nameJSON 编码的格式化程序函数名称
【发布时间】:2011-06-01 08:15:21
【问题描述】:

我正在使用 jqgrid,为此我在服务器上将列定义创建为动态对象,并使用 Json.Encode 对其进行序列化:

html.Raw(System.Web.Helpers.Json.Encode(ColumnDefinition);

我在应用自定义格式化程序时遇到问题,因为我的序列化列定义是:

{"name":"Icon","index":"Icon","hidden":false,"formatter":"iconFormatter","unformat":{}}

问题在于添加到所有键和值以尊重 JSON 规范的引号中,而 iconFormatter 周围的那些在我的情况下是问题,因为我希望它成为我的功能。 有没有简单的解决方案?

【问题讨论】:

    标签: javascript jqgrid json


    【解决方案1】:

    在我看来,您遇到的问题与here 描述的相同或相似。您必须将formatter 属性的字符串值替换为函数引用。实用的方法是搜索 "iconFormatter" 之类的字符串(搜索您使用的所有自定义格式化程序)并将那里替换为相应的函数引用。

    更新:如果您在列定义中使用template 属性(请参阅here),您将以另一种方式解决问题。此外,您的代码会更短、更清晰、可读性更好。

    【讨论】:

    • 是的,在 Html.Raw 之前,我已经在服务器上进行了搜索和替换,但我不喜欢这样,因为它只解决了格式化程序问题,并且会有更多功能。我现在将尝试使用 functionsMapping 和 foreach 通过列模型替换 jqgrid 构造之后的那些。
    • @Oleg 谢谢,我已经根据您发布的第一个链接使用解决方案更新了这篇文章。在这种情况下,模板不是我需要的,但它是非常有用的功能,因为我可以在视图中声明部分定义。谢谢
    • @obrad:在我看来,使用列模板应该是更好的方法。有关详细信息,请参阅here。查看另一个使用模板的演示 here。哦!现在在我看来,你这样做也会有同样的问题。
    • @Oleg 我知道(现在:))也可以通过在模板中声明格式化程序来使用模板执行此操作,但我没有这样做,因为我需要将该属性添加到我的服务器端的 ColumnModel,并更新列定义,这将是我将要做的并将其放入模板中,如果有其他任何事情应该用这个列完成:)
    • 嗯,网格构造后更改格式化程序似乎不起作用(jqgrid 不应用新功能)。看来我必须将第一个解决方案(字符串替换)与模板结合使用,所以唯一的替换就是模板名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多