jQuery DataTable插件:自定义列选项&在运行时更新默认选项

时间:2016-04-27 22:42:18

标签: jquery plugins datatable

我正在为jQuery DataTable编写一个小的自定义插件,它使用标准的表级选项启用它。我有两个问题:

  1. 能够添加插件随后将检索的自定义列定义选项
  2. 将标准DataTable列选项设置为在运行时确定的新值。
  3. 例如,我这样定义我的表:

    $('#example').DataTable( {
        myPlugin:   true,
        columns: [
          {
            name: 'col1',
            myPluginOption: ['optionVal1', 'optionVal2']
          },
          .
          .
          .
        ]
    } );
    

    然后在插件中我想将听众添加到' dt.init'事件,并在其中做这样的事情:

    ...
    _dtInit: function() {
       this.dt.columns().every(function() {
            //1. retrieve the value of my custom option
            var myOptions = this.myPluginOption; //or this.myPluginOption() ?
            ...
            //2. set a default column option to a new value that 
            //wasn't known at initial definition (e.g.: dataOrder)
            this.dataOrder = [newInt1, newInt2];
    
       });
    }
    

    谢谢!

1 个答案:

答案 0 :(得分:0)

找到一种方法利用这样一个事实:当一个监听器被添加到DT事件时,设置被传递给监听器函数。

然而,我们需要使用原始/旧样式选项名称。属性名称在内部由DT映射到旧属性名称,并且仅存在于先前选项名称状态的设置对象中。即:orderData选项作为aDataSort存在于设置对象中。这是完整的参数转换参考:https://datatables.net/upgrade/1.10-convert

...
_dtInit: function(e, settings) {
   $.each(settings.aoColumns, function(index, column) {
       //1. retrieve the value of my custom option

       var myOptions = column.myPluginOption;

       ...

       //2. set a default column option to a new value that 
       //wasn't known at initial definition (e.g.: dataOrder)
       //*** Using old option name for dataOrder here:

       this.aDataSort = [newInt1, newInt2]
   });
}
  • 注意,第2步示例可能不是最好的,因为更新可排序顺序将导致表重新排序已加载的数据并重新绘制。在加载数据之前,这将更适合preInit侦听器。