在我的col模型中,我有两个单元格'Status'和'HiddenStatus'。原因是“状态”是可翻译的,所以这种方式更好,而不是检查每种语言的值。如您所见,我试图根据'HiddenStatus'单元格的值设置'Status'单元格的类。然而,由于课程设置不正确,因此无法正常工作。
我相信我遇到的问题是'getCell'用于返回值而不是对象。如何将单元格作为对象,以便我可以管理我添加或删除的类。
{name: 'Status', width: 70, index: 'Status'},
{name: 'HiddenStatus', width: 70, hidden: true, cellattr : function(rowId, cellValue, rawObject, cm, rdata){
var statusCell = $(this).jqGrid('getCell',rowId,'Status');
if(cellValue != "Assigned"){
$(statusCell).removeClass('status-assigned');
return '';
}
if(cellValue == "Assigned"){
$(statusCell).addClass('status-assigned');
return '';
}
}},
答案 0 :(得分:1)
首先,了解cellattr
做什么很重要。现有页面上的任何更改都很昂贵。因此,jqGrid尝试使用表体构建整个HTML片段作为一个长字符串。每列将用于构建网格的相应列的单元格(<td>
元素)。在构建单元格期间将调用回调cellattr
,并可用于设置单元格上的属性。 cellattr
回调必须返回字符串。如果它返回,例如" class='status-assigned'"
,那么<td>
将拥有该类(<td class='status-assigned'>...</td>
)。
回调cellattr
将被称为之前将创建网格。因此,例如,使用$(this).jqGrid('getCell',rowId,'Status')
无法访问网格。
如果您需要在status-assigned
列的单元格上有条件地设置课程Status
,那么您应该在cellattr
列中定义Status
回调 。在回调中,您可以使用rawObject.HiddenStatus
或rdata.HiddenStatus
。通常不需要创建像HiddenStatus
这样的隐藏列。取而代之的是,在jqGrid的additionalProperties
选项中使用包含输入数据的所有属性就足够了。例如,additionalProperties: ["HiddenStatus"]
。
您的原始代码可以修改为以下内容:
{
name: 'Status', width: 70,
cellattr: function (rowId, cellValue, item) {
if (item.HiddenStatus === "Assigned") {
return " class='status-assigned'";
}
}
}
有关使用情况的示例cellattr
,请参阅the old answer。