2015-10-16 138 views
0

在我的应用程序中,有一些列被授予特权。 如果没有给出该列访问该特定列的权限未显示。jQuery DataTables中的动态列

我的代码是这样的:http://jsfiddle.net/oscar11/5jccbzdy/11/

// DataTable 
    var table = $('#example').DataTable({ 
     "order": [[0, 'asc']], 
     "drawCallback": function (settings){ 
      var api = this.api(); 

      // Zero-based index of the column containing names 
      var col_name = 0; 

      // If ordered by column containing names 
      if (api.order()[0][0] === col_name) { 
       var rows = api.rows({ page: 'current' }).nodes(); 
       var group_last = null; 

       api.column(col_name, { page: 'current' }).data().each(function (name, index){ 
        var group = name; 
        var data = api.row(rows[index]).data(); 

        if (group_last !== group) { 
         $(rows[index]).before(
          '<tr class="group" style="background-color:' + data[4] + '"><td colspan="5">' + group + '</td></tr>' 
         ); 

         group_last = group; 
        } 
       }); 
      } 
     } 
    }); 

如何使上面的代码变得更具活力和调整被赋予特权的列数?

如果被赋予特权的列数:5,那么:

'<tr class="group" style="background-color:' + data[4] + '"><td colspan="5">' + group + '</td></tr>' 

如果被赋予特权的列数:3,则:

'<tr class="group" style="background-color:' + data[2] + '"><td colspan="3">' + group + '</td></tr>' 

谢谢

回答

1

SOLUTION

您可以使用columns.name选项为包含颜色的数据列定义名称。

然后在行分组代码中,您可以使用column-selectorcolor:name中的api.column("color:name").index()来获取该列的索引。

使用下面的代码:

// DataTable 
var table = $('#example').DataTable({ 
    "order": [[3, 'asc']], 
    "columnDefs": [ 
     { targets: 3, name: "group" }, 
     { targets: -1, name: "color" } 
    ], 
    "drawCallback": function (settings){ 
     var api = this.api(); 

     // Zero-based index of the column containing group names 
     var col_name = api.column("group:name").index(); 
     var col_color = api.column("color:name").index(); 

     // If ordered by column containing names 
     if (api.order()[0][0] === col_name) { 
      var rows = api.rows({ page: 'current' }).nodes(); 
      var group_last = null; 

      api.column(col_name, { page: 'current' }).data().each(function (group, index){ 
       if (group_last !== group){       
        var color = api.cell({ 
         row: api.row(rows[index]).index(), 
         column: col_color 
        }).data(); 

        $(rows[index]).before(
         '<tr class="group" style="background-color:' + color + '"><td colspan="5">' + group + '</td></tr>' 
        ); 

        group_last = group; 
       } 
      }); 
     } 
    } 
}); 

DEMO

this jsFiddle代码和演示。

+0

谢谢你回答我的问题。我仍然困惑。我试过上面的代码。我将列“渲染引擎”更改为第三列。例如,列“引擎”没有被赋予访问权(如果没有权限访问该列将丢失)。我试过这样的代码:[link](http://jsfiddle.net/oscar11/5qtoyunq/1/)。 虽然其他列(列“引擎”)没有被赋予访问权限(被删除),我怎样才能使该分组列固定列“渲染引擎”? –

+0

@mosestoh,增加了更多细节并更新了示例。您可以在'columnDefs'部分指定包含组和颜色的列的索引。然后,'drawCalback'中的代码将使用名称'group'和'color'来检索这些索引,而不是对它们进行硬编码。 –

+0

谢谢你Gyrocode.com。但是我仍然很难实现我的问题。你尝试看看这里:[链接](http://jsfiddle.net/oscar11/5qtoyunq/1/)。尽管其他列(列“引擎”)没有被赋予访问权限(被删除),我怎样才能使该分组列固定列“渲染引擎”?我的意思是喜欢它。 –