Javascript 带有动态列的JQGrid:cellattr不工作
我以这种方式(ajax调用)构建了带有动态列的JQGrid表: 绝对没有任何效果。 即使我像这样直接在cellattr中输入代码Javascript 带有动态列的JQGrid:cellattr不工作,javascript,jquery,dynamic,jqgrid,format,Javascript,Jquery,Dynamic,Jqgrid,Format,我以这种方式(ajax调用)构建了带有动态列的JQGrid表: 绝对没有任何效果。 即使我像这样直接在cellattr中输入代码 "cellattr"=>"function( rowId, value, rowObject, colModel, arrData) { return ' style=\"background:orange\"'}" ); 有没有人面对或知道这个问题的解决方案 提前感谢您的合作 更新 谢谢你,奥列格。它对cellattr和template非常有效(这是一个非常
"cellattr"=>"function( rowId, value, rowObject, colModel, arrData) { return ' style=\"background:orange\"'}" );
有没有人面对或知道这个问题的解决方案
提前感谢您的合作
更新
谢谢你,奥列格。它对cellattr和template非常有效(这是一个非常好的建议)
对于感兴趣的人,请参见以下代码:
var rowSetting = function (rowId, val, rawObject, cm) {
return 'style="background-color: orange;';
};
var cellattrMapping = {
"rowTemplate": rowTemplate
};
var rowTemplate = {
width:120,
cellattr: rowSetting
};
AJAX调用
成功:函数(结果)
{
...
对于(i=0;i而言,您所做的似乎是将cellatr
设置为字符串值cellatr:“行设置”
而不是将其初始化为函数指针。问题是可以作为JSON发送的数据中存在一些限制。它支持字符串、数字、布尔值、数组和对象,但您可以将函数作为JSON数据的一部分发送
对于这个问题,可以提出许多解决方法。例如,您可以使用一些使用的cellattr
函数创建JavaScript代码。您可以将所需的所有cellattr
函数放在一个对象中:您的自定义cellattr
“字符串到函数映射”。在success
回调中,您可以检查result.colModel
项的cellattr
属性。如果找到cellattr
属性,您应该将字符串值替换为相应的函数引用
在中,我描述了更详细的非常接近的解决方案。您可以对cellattr
使用相同的方法
在我看来,更好的方法是使用colModel
的template
属性(请参阅)。您将遇到与以前相同的问题,但您可以提供在不同网格中使用的通用模板,并将第一个字符串值作为colModel
的template
属性的值发布。然后您可以将该值替换为包含所有必需实现细节的JavaScript对象。使用的主要优点是列模板在多个网格上共享公共代码。colModel
中的信息变得更小,可读性更强。模板可以轻松修改。您所做的似乎是将cellatr
设置为字符串值cellatr:“行设置”
而不是将其初始化为函数指针。问题是可以作为JSON发送的数据中存在一些限制。它支持字符串、数字、布尔值、数组和对象,但您可以将函数作为JSON数据的一部分发送
对于这个问题,可以提出许多解决方法。例如,您可以使用一些使用的cellattr
函数创建JavaScript代码。您可以将所需的所有cellattr
函数放在一个对象中:您的自定义cellattr
“字符串到函数映射”。在success
回调中,您可以检查result.colModel
项的cellattr
属性。如果找到cellattr
属性,您应该将字符串值替换为相应的函数引用
在中,我描述了更详细的非常接近的解决方案。您可以对cellattr
使用相同的方法
在我看来,更好的方法是使用colModel
的template
属性(请参阅)。您将遇到与以前相同的问题,但您可以提供在不同网格中使用的通用模板,并将第一个字符串值作为colModel
的template
属性的值发布。然后您可以将该值替换为包含所有必需实现细节的JavaScript对象。使用的主要优点是列模板在多个网格上共享公共代码。colModel
中的信息变得更小,可读性更强。模板可以轻松修改
"cellattr"=>"function( rowId, value, rowObject, colModel, arrData) { return ' style=\"background:orange\"'}" );
var rowSetting = function (rowId, val, rawObject, cm) {
return 'style="background-color: orange;';
};
var cellattrMapping = {
"rowTemplate": rowTemplate
};
var rowTemplate = {
width:120,
cellattr: rowSetting
};
success: function(result)
{
...
for (i=0; i<colM.length; i++) {
cm = colM[i];
if (cm.hasOwnProperty("template") && cellattrMapping.hasOwnProperty(cm.template))
{
cm.template = cellattrMapping[cm.template];
}