2

私のjqGrid仕事は動的です。すべてのオプションも動的に読み込まれるようにします。このオプションはjavaで生成されます。Map<String,Object> すべてのオプションは非常にうまく機能しますが、de内の関数名は機能しmap/optsません。これはjsonjavaで生成されたマップです。

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

私はまだデバッグしてjqgrid.src.jsいませんが、問題はにあると思いますeval。「myFunction」は呼び出されず、undefinedが返されます。

4

1 に答える 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 に答える