Jqgrid使用cellattr在单独的单元格上切换类

时间:2016-05-23 09:37:34

标签: jqgrid free-jqgrid

在我的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 '';
 }                           
}},

1 个答案:

答案 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.HiddenStatusrdata.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