YADCF custom_func没有调用自定义函数

时间:2018-03-16 21:40:43

标签: yadcf

我有一个数据库字段,其中包含整数1(表示值'document')或整数2(表示值'email'),我使用数据表来格式化/显示这些整数作为单词'document'或'在表格栏中发送电子邮件。因此,我想使用YADCF来选择“文档”或“电子邮件”,并让数​​据表相应地过滤结果集。 Link to screen shot of table column.

我已经使用了custom_func功能,如下所示(为简洁起见,代码被剥离),但无论数据表的所有其他方面是否正常工作,过滤器选择器看起来如预期并保持所选值,并且没有控制台错误,我的自定义函数没有被调用。我已经尝试在初始化YADCF之前立即手动调用自定义函数,检查范围,并且它被调用就好了。任何人都可以看到任何明显错误吗?

$(document).ready(function() {
    function customFilterDocEmail(filterVal, columnVal) {
        alert('customFilterDocEmail called');
        var found;
        if (columnVal === '') {
            return true;
        }
        switch (filterVal) {
            case 'doc':
                found = columnVal === '1';
                break;
            case 'email':
                found = columnVal === '2';
                break;
            default:
                found = 1;
                break;
        }
        if (found !== -1) {
            return true;
        }
        return false;
    }
})


var table = $('#table').DataTable({
  serverSide: true,
  processing: true,
  ajax: {
    url: '/api/datatables/getJson/doctext/doctexts',
    type: 'POST', 
    data: function(d) {d.CSRFToken = '****';}
  },
  stateSave: true,
  responsive: true,
  pageLength: 25,
  order: [[0, 'asc']],
  columns: [ 
    { data: 'txt_type', width: '10%' },
    { data: 'txt_title' },
    { data: 'txt_name', width: '20%' },
    { data: 'link', orderable: false, width: '5%' },
  ],
  }
});

yadcf.init(table, [ 
  { column_number: 0, filter_type: 'custom_func', custom_func: customFilterDocEmail,
    data: [{ value: 'doc', label: 'Document' }, { value: 'email', label: 'Email' }] },
  { column_number: 1, column_data_type: 'text', filter_type: 'text', filter_delay: 500, filter_default_label: '', },
  { column_number: 2, column_data_type: 'text', filter_type: 'text', filter_delay: 500, filter_default_label: '', },
  ], 'footer');
  • YADCF版本:0.9.3.beta.11
  • DataTables版本:1.10.16

更新:我不知道上面我做错了什么,但我想出了一个小小的黑客,省去了使用'custom_func'和自定义过滤器。我使用了标准的'select'过滤器类型,但截获了我的DatatablesSSP脚本的filter()方法中的过滤器字符串:

$str = $requestColumn['search']['value'];    
// returned search values for doctext 'txt_type' are Document/Email, so we need to map these to 1/2.
if ($column['db'] == 'txt_type') {
    if ($str == 'Document') { $str = '1'; }
    if ($str == 'Email') { $str = '2'; }
}

这是一种享受:)

1 个答案:

答案 0 :(得分:0)

您必须将customFilterDocEmail功能置于$(document).ready块之外,以便它是全局的,而 yadcf 看到它