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.HiddenStatus
或 rdata.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 answer。cellattr
。
在我的 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.HiddenStatus
或 rdata.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 answer。cellattr
。