2

我的jqGrid工作是动态的。所以所有选项也都是动态加载的。这个选项是用java生成的,Map<String,Object> 所有选项都很好用,但是de里面的函数名map/opts不起作用。这是json用java生成的地图。

"colModel":[...{"formatter":"myFunction","index":"","name":""}]

我还没有调试jqgrid.src.js,我认为问题出在eval. 未调用“myFunction”并返回未定义。

4

1 回答 1

1

如果它是预定义的格式化程序之一,则该formatter选项可以是字符串,但根据自定义格式化程序的 jqGrid 文档

您可以为特定列定义自己的格式化程序。通常这是一个函数。

所以 jqGrid 期望一个函数被传递。这就是为什么myFunction有效但"myFunction"无效的原因。无论如何,要解决您的问题,您需要输出代码:

"formatter": myFunction


更深入一点,您可以在 jqGrid 源文件grid.base.js中看到格式化程序直接使用一个函数,但是如果传递了一个字符串,则该字符串将传递给$.fn.fmatter

    formatter = function (rowId, cellval , colpos, rwdat, _act){
        var cm = ts.p.colModel[colpos],v;
        if(typeof cm.formatter !== 'undefined') {
            var opts= {rowId: rowId, colModel:cm, gid:ts.p.id, pos:colpos };
            if($.isFunction( cm.formatter ) ) {
                v = cm.formatter.call(ts,cellval,opts,rwdat,_act);
            } else if($.fmatter){
                v = $.fn.fmatter(cm.formatter, cellval,opts, rwdat, _act);
            } else {
                v = cellVal(cellval);
            }
        } else {
            v = cellVal(cellval);
        }
        return v;
    },

如果jquery.fmatter.js中还没有该函数,那么我预计当网格尝试使用它时会发生错误。

于 2012-05-22T20:39:51.060 回答