Javascript 当网格数据绑定是动态的时,如何为jqgrid单元格设置自定义标题

Javascript 当网格数据绑定是动态的时,如何为jqgrid单元格设置自定义标题,javascript,dynamic,data-binding,jqgrid,Javascript,Dynamic,Data Binding,Jqgrid,我有一个带有动态数据绑定的jqgrid,需要为每个单元格设置自定义标题。我应用了解决方案中描述的方法 但它不起作用。我的代码如下 设置colModel的操作方法: var result = new { Json = new { colNames = new[] { "T1", "T2" }, colModels = new[] { new { index = "T1", label = "T1", name = "T1",

我有一个带有动态数据绑定的jqgrid,需要为每个单元格设置自定义标题。我应用了解决方案中描述的方法

但它不起作用。我的代码如下

设置colModel的操作方法:

var result = new { 
    Json = new { 
        colNames = new[] { "T1", "T2" }, 
        colModels = new[] { 
            new { index = "T1", label = "T1", name = "T1", 
                width = 100, cellattr = "customTitle", 
                editable = true, strtooltip = "A0" }, 
            new { index = "T2", label = "T2", name = "T2", 
                width = 100, cellattr = "customTitle", 
                editable = true, strtooltip = "A1" 
            } 
        }, 
        data = ......................

$.ajax({
    url: '/Client/PatientListing/GetTestData',
    type: 'POST',
    data: {},
    success: function (result) {
        var colModels = result.Json.colModels;
        var colNames = result.Json.colNames;
        var data = result.Json.data.options;
        jQuery.each(colModels, function (index, value) {
            debugger;
            cm = value;
            if (cm.hasOwnProperty("cellattr") &&
                functionsMapping.hasOwnProperty(cm.cellattr)) {
                cm.cellattr = functionsMapping[cm.cellattr];
            }
        });

        var functionsMapping = {
            "customTitle": function (rowId, val, rawObject) {
                return 'title="' + rawObject.T1 + ' (' + rawObject.T2 + ')"';
            }

        };

在我看来,您似乎希望从服务器返回JSON数据,该服务器包含
cellattr
。如果您使用更新版本的jqGrid,这是可能的。您可以定义自定义字符串名称,您可以通过以下方式将其用作
cellatr
回调的值

$.jgrid = $.jgrid || {};
$.jgrid.cellattr = $.jgrid.cellattr || {};
$.extend(true, $.jgrid.cellattr, {
    customTitle: function (rowId, val, rawObject) {
        return 'title="' + rawObject.T1 + ' (' + rawObject.T2 + ')"';
    },
    customTitle2: function (rowId, val, rawObject) {
        return 'title="' + rawObject.T1 + ' [' + rawObject.T2 + ']"';
    }
});
现在,您可以在列定义中使用
cellattr:“customTitle”
cellattr:“customTitle2”

顺便说一句,免费jqGrid支持更多的
cellattr
参数。它具有附加参数
cm
rdata
。参数
cm
是当前将处理的
colModel
项,
rdata
接近
rawObject
,但其格式始终与命名属性相同。问题在于
cellatr
中使用的
rawObject
rowattr
和自定义格式化程序的格式与输入数据完全相同。如果处理XML输入数据,则
rawObject
是一个XML节点。如果您使用数组形式的数据处理JSON输入[“1”,“2007-10-01”,“test”,“note”,“200.00”,“10.00”,“true”,“TN”,“210.00”]而不是
{id:“1”,invdate:“2007-10-01”,name:“test”,note:“note”,amount:“200.00”,tax:“10.00”,closed:true,ship_via:“TN”,total:“210.00”
并且您使用
loadonce:true
此外,在第一次处理输入数据时,
cellattr
rawObject
作为数组,在以后的处理中作为具有命名属性的对象。这使得
cellattr
的逻辑更加复杂

由于引入了额外的
rdata
参数,该参数以对象形式提供数据allays。免费jqGrid是jqGrid的分支,我是在Tony更改jqGrid的许可协议并将其产品重命名为Guriddo jqGrid JS后开发的

下面是代码的代码片段

$.jgrid = $.jgrid || {};
$.jgrid.cellattr = $.jgrid.cellattr || {};
$.extend(true, $.jgrid.cellattr, {
    customTitle: function (rowId, cellValue, rawObject, cm, rdata) {
        if (cm.name === "name") {
            return 'title="' + rdata.amount + ' (' + rdata.note + ')"';
        } else {
            return 'title="' + rdata.amount + ' (' + rdata.name + "; " + rdata.note + ')"';
        }
    }
});
请参阅相应的演示