使用回调将自定义fomatter的值分配给jqgrid列

时间:2014-08-21 12:25:20

标签: javascript jquery jqgrid

我编写了一个代码,它为jqgrid列使用自定义格式化程序。格式化程序正在使用callabck。当尝试将此函数的值分配给格式化程序时,我得到未定义的值,而在发出警报时,我得到正确的值。这是我的代码。任何帮助都应该受到赞赏。

var str='';
function myFormatter(cellvalue, options, rowObject, callback) {

var loadUrl= 'someUrl';


    $.getJSON(loadUrl, function(jsnResponse) {

        if (typeof (callback) === "function") {
            alert('within callback ' + jsnResponse.logo);
            str= '<img width="20"  src=' + jsnResponse.logo + '  />';
            callback(str);
        }

    });

}

为了调用此函数并分配给jqgrid格式化程序,我使用以下代码

formatter :  function(cellvalue, options, rowObject){
                                    return myFormatter
                                    (cellvalue, options, rowObject, function(str) {
                                        alert('in formatter '+str);


                                });

由于

1 个答案:

答案 0 :(得分:0)

我认为有一个误解是什么是自定义格式化程序以及它将如何使用。自定义格式化程序已经是回调函数,如果要使用该功能,则必须定义该函数。如果为某些列定义的属性formatter及其值是函数,则 jqGrid会调用您的回调。因为jqGrid进行调用,所以jqGrid指定它使用的参数。

另一方面,自定义格式化程序的第二个参数(options参数)包含一些对您有帮助的属性。例如,colModel属性(options.colModel)是colModel的元素,其中使用了自定义格式化程序。以下代码显示了我的意思

function myFormatter(cellvalue, options, rowObject) {
    var myOption1 = options.colModel.formatoptions.myOption1;
    ...
}

...

colModel: [
    { name: "col1", formatoptions: { myOption1: "abc" }, formatter: myFormatter },
    { name: "col2", formatoptions: { myOption1: "xyz" }, formatter: myFormatter },
    ...
]

以上述方式,对于不同的列,将使用不同的myFormatter选项(myOption1"abc")调用相同的函数"xyz"。您可以定义 任何类型的任何选项(包含回调函数)。如果需要,您可以访问自定义格式化程序中的rowid:您可以使用options.rowId