我有一个数据库字段,其中包含整数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');
更新:我不知道上面我做错了什么,但我想出了一个小小的黑客,省去了使用'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'; }
}
这是一种享受:)
答案 0 :(得分:0)
您必须将customFilterDocEmail
功能置于$(document).ready
块之外,以便它是全局的,而 yadcf 将看到它