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

Jqgrid using cellattr to toggle a class on seperate cell

在我的 col 模型中,我有两个单元格 'Status' 和 'HiddenStatus'。这样做的原因是 'Status' 是可翻译的,所以这种方式比检查每种语言的值更好。正如您在下面看到的,我正在尝试根据 'HiddenStatus' 单元格的值设置 'Status' 单元格的 class。然而,这并没有像我希望的那样工作,因为 class 没有被正确设置。

我认为我遇到的问题是,'getCell' 用于 return 值而不是对象。我怎样才能将单元格作为一个对象,这样我就可以管理我添加或删除的内容 class。

{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 '';
 }                           
}},

首先,了解 cellattr 的作用很重要。现有页面上的任何更改都是昂贵的。因此 jqGrid 尝试将整个 HTML 片段与 table 主体构建为一个长 string。每一列都将用于构建网格相应列的单元格(<td> 个元素)。回调 cellattr 将在构建单元格期间调用,可用于设置单元格的属性。 cellattr 回调必须 return 字符串。如果它 returns,例如 " class='status-assigned'" 那么 <td> 将有 class (<td class='status-assigned'>...</td>).

将在创建网格之前调用回调 cellattr。例如,因此无法使用 $(this).jqGrid('getCell',rowId,'Status') 访问网格。

如果您需要在 Status 列的单元格上有条件地设置 class status-assigned 那么您应该在该列中定义 cellattr 回调 Status。在回调中,您可以使用 rawObject.HiddenStatusrdata.HiddenStatus。通常不需要创建像 HiddenStatus 这样的隐藏列。取而代之的是,在 jqGrid 的 additionalProperties 选项中使用 include 输入数据的所有属性就足够了。例如,additionalProperties: ["HiddenStatus"].

您的原始代码可以修改为以下内容:

{
    name: 'Status', width: 70,
    cellattr: function (rowId, cellValue, item) {
        if (item.HiddenStatus === "Assigned") {
            return " class='status-assigned'";
        }
    }
}

有关用法示例,请参阅 the old answercellattr