我编写了一个代码,它为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);
});
由于
答案 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
。