如何在 jqGrid.Is 可能的情况下动态使用“格式化程序”

How to use "formatter" dynamically in jqGrid.Is it possible?

本文关键字:格式化 程序 格式化程序 动态 情况下 jqGrid Is      更新时间:2023-09-26

有没有办法在jqGrid中动态使用"格式化程序"?我想从代码中动态使用格式标题函数,这是我的代码:

.HTML

<table id="list47"><tr><td></td></tr></table>
<div id="plist47"></div>

Javascript:

var md=[{ "id": "83123a", Name: "Name 1", "PackageCode": "83123a" },
                { "id": "83432a", Name: "Name 3", "PackageCode": "83432a" },
                { "id": "83566a", Name: "Name 2", "PackageCode": "83566a" }]
var he=["id","Name","PackageCode"];
var c=[];
for(var i=0;i<he.length;i++){
  c.push('{"name":"'+he[i]+'","index":"'+he[i]+'"}');
}
var colmodel="["+c+"]"
//var colmodel= [{name:'id', index:'id', width:55},
         //     {name:'Name', index:'Name' },
          //      {name:'PackageCode', index:'PackageCode'}]
  // c.push('{"name":"'+he[i]+'","index":"'+he[i]+'"'+'"formatter":'+formatTitle+'}');                  
jQuery("#list47").jqGrid({
    //data: md,
    datatype: "local",
    height: 150,
    rowNum: 10,
    colNames: he,
    colModel: jQuery.parseJSON(colmodel),
    rowList: [10,20,30],
    pager: "#plist47",
    viewrecords: true,
     caption: "json data grid"
});
for(var i=0;i<md.length;i++){
 jQuery("#list47").addRowData(i+1,md[i]);
 }
  function formatTitle(cellValue, options, rowObject) {
                return "<a href='" + rowObject.Link + "'>" + cellValue.substring(0, 45) + "..." + "</a>";
                //return cellValue.substring(0, 50) + "...";
            };

您必须将格式化程序放在字符串中,如下所示

for(var i=0;i<he.length;i++){
 c.push('{"name":"'+he[i]+'","index":"'+he[i]+'"'+',"formatter":"formatTitle"'+'}'); 
}

然后你去找到 jqGrid 代码之前的格式化程序,如下所示

  $.fn.fmatter.formatTitle = function (cellValue, options, rowObject) {
     return "<a href='" + rowObject.Link + "'>" + cellValue.substring(0, 45) + "..." + "</a>";         
    };

因为它被包装在一个字符串(格式化程序:"formatTitle")中,所以你不能将你以前的签名用于格式化程序

函数 formatTitle(cellValue, options, rowObject) 这可以使用,如果格式化器:formatTitle,它不可能动态构造

这是您问题的jsfiddle解决方案