2

我在我的应用程序中使用 Bootstrap 和 DataTables,并且我有一个基于类的表的默认初始化程序。我可以将类数据表添加到表中,并使用我想要的默认值对其进行实例化。

我想知道如何根据特定表更改或更新特定选项。

if ($.fn.dataTable) {
    $('.data-table').dataTable( {
        sDom: "R<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
        sPaginationType: "bootstrap",
        oLanguage: {
            "sLengthMenu": "_MENU_ &nbsp; records per page"
        },
        aoColumnDefs: [
            { "bSortable": false, "aTargets": [ 0 ] }
        ]
    });
}

我所有的数据表在第一列都有一个复选框,因此上述删除排序对所有数据表都有效。但我希望能够aoColumnDefs逐个表更新,这样我就可以添加我不想排序的其他列。

所以假设我有一个表:$('#member-list'),我如何访问这个对象并在 jQuery 中更新它的数据表选项?我在任何地方都找不到任何参考或帮助。

4

2 回答 2

1

由于您只能aoColumnDef在实例化dataTable对象时进行配置,因此我决定采用更优雅的方法并使用数据属性和附加功能来设置可排序的列。

在我的表格中,我添加data-sort="0, 4, 8"或任何我想要排序的特定字段。

然后我创建了一个简单的函数,将数据属性的字符串值转换为数值数组以传递给aTargets:.

function convertData (string) {
   $array = Array();
   if (string) {
      $items = string.split(',');
      $.each($items, function () {
         $array.push(parseInt(this, 10));
      });
   }
   return $array;
}

现在我可以简单地遍历每个$('.data-table')并获取data-sort属性,将其传递convertData()给创建我的数组,然后aTargets在创建dataTable对象时将其传递给。

if ($.fn.dataTable) {
   $('.data-table').each(function() {
      $targets = convertData($(this).data('sort'));
      $(this).dataTable({
         sDom: "R<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
         sPaginationType: "bootstrap",
         oLanguage: {
            "sLengthMenu": "_MENU_ &nbsp; records per page"
         },
         aoColumnDefs: [
            { "bSortable": false, "aTargets": $targets }
         ]
      });
   });
}

感谢所有试图提供帮助的人:-)

-V

于 2012-12-20T12:17:32.767 回答
0

DataTables插件有一个别名来访问 Settings 对象,即dataTableSettings. 我不知道您尝试更改哪些设置(或者即使它们都可以通过此对象写入),但我已经验证可以更改,例如,第 n列的可排序性:

`$('#member-list').dataTableSettings.aoColumns[n].bSortable = true;`
于 2012-12-19T17:23:16.020 回答