Javascript 当网格数据绑定是动态的时,如何为jqgrid单元格设置自定义标题
我有一个带有动态数据绑定的jqgrid,需要为每个单元格设置自定义标题。我应用了解决方案中描述的方法 但它不起作用。我的代码如下 设置colModel的操作方法: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",
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 + ')"';
}
}
});
请参阅相应的演示