Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有动态列的JQGrid:cellattr不工作_Javascript_Jquery_Dynamic_Jqgrid_Format - Fatal编程技术网

Javascript 带有动态列的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非常有效(这是一个非常

我以这种方式(ajax调用)构建了带有动态列的JQGrid表:

绝对没有任何效果。 即使我像这样直接在cellattr中输入代码

"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];
         }