从未调用过的自定义函数
Custom function never called
我正在尝试使用 multi_select_custom_func
为 multi_select filter_type
实现排除按钮。我也试过custom_funcp
。问题是 自定义函数从未被调用 。我确定 它在 yadcf 的范围内,因为我在初始化之前调用它来测试它。
我想将其用于服务器端数据检索(用于 table 和 select 框)和 AJAX 分页,所以如果有任何其他提示考虑请告诉我。
我无法在片段中重现该问题,因为它需要服务器端加载。但是我设法让它在没有服务器端加载的情况下工作。我认为问题与 columns
datatable 参数有关。
这些是我正在使用的参数。
columns = [
{ data: "count" , title: "Occurrences" },
{ data: "source" , title: "Source" },
{ data: "relationship" , title: "Relation"},
{ data: "target_label" , title: "Target" },
{ data: "target_type" , title: "Target Type"},
{ data: "relationship_uri" , title: "Details", sortable: false,
render: function ( data, type, row, meta ) {
return `<a href="${data}"><i class="material-icons text-info">info</i></a>`;
}
}
]
table = $(table_html).DataTable({
pageLength: 10,
buttons: [
{
text: 'Reset Filters',
action: function ( e, dt, node, config ) {
yadcf.exResetAllFilters($(table_html).DataTable());
}
}
],
sDom: "<'row'<'col-sm-4'l><'col-sm-4'B><'col-sm-4'i>><'row'<'col-sm-12'tr>><'row'<'col-sm-12'p>>",
lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
serverSide: true,
ajax: url,
processing: true,
deferRender: false,
responsive: true,
//stateSave: true,
bAutoWidth: false,
bSortCellsTop: true,
columns: columns,
order: [0, 'desc']
});
yadcf.init(table, [
{
column_number: 0,
filter_type: "range_number"
},
{
column_number: direction == 'in' ? 1 : 3,
filter_type: "multi_select",
select_type: 'select2',
sort_as: 'none'
},
{
column_number: 2,
filter_type: "multi_select",
select_type: 'select2',
sort_as: 'none'
},
//3rd is the 1
{
column_number: 4,
filter_type: "custom_func",
select_type: 'select2',
sort_as: 'none',
custom_func: myCustomFilterFunction,
data: [{
value: 'Donna',
label: 'Donna'
}, {
value: 'sad',
label: 'Sad'
}, {
value: 'angry',
label: 'Angry'
}, {
value: 'lucky',
label: 'Lucky'
}, {
value: 'january',
label: 'January'
}],
filter_default_label: "Custom func filter"
}
],
{filters_tr_index: 1}
);
由于您设置 searching
false,自定义函数无法正常工作。更改代码
oTable = $('.mytable2').DataTable({
pageLength: 10,
scroller: false//,
//Should not disable the searching function
//searching: false
});
试试这个更新后的 code snippet
我无法通过 yadcf 找到解决方案,所以最后我实现了自己的排除切换,并将排除切换状态添加到 AJAX DataTables 发送的数据。
ajax: {
url: url,
data: function(data, settings) {
var table = $(`#${settings.sTableId}`); //get current table
table.find('.exclude_toggle').each(function(idx, element){
var field = $(element).attr('field');
var exclude = $(element).attr('exclude');
var column = _.find(data.columns, column => column.data == field);
column.search.exclude = JSON.parse(exclude.toLowerCase());
});
return data;
}
}, [...]
对于排除切换,您可以使用
$(`#${table_id}`).DataTable().ajax.reload();
在单击事件中强制 DataTables 向服务器发送新请求。
我正在尝试使用 multi_select_custom_func
为 multi_select filter_type
实现排除按钮。我也试过custom_funcp
。问题是 自定义函数从未被调用 。我确定 它在 yadcf 的范围内,因为我在初始化之前调用它来测试它。
我想将其用于服务器端数据检索(用于 table 和 select 框)和 AJAX 分页,所以如果有任何其他提示考虑请告诉我。
我无法在片段中重现该问题,因为它需要服务器端加载。但是我设法让它在没有服务器端加载的情况下工作。我认为问题与 columns
datatable 参数有关。
这些是我正在使用的参数。
columns = [
{ data: "count" , title: "Occurrences" },
{ data: "source" , title: "Source" },
{ data: "relationship" , title: "Relation"},
{ data: "target_label" , title: "Target" },
{ data: "target_type" , title: "Target Type"},
{ data: "relationship_uri" , title: "Details", sortable: false,
render: function ( data, type, row, meta ) {
return `<a href="${data}"><i class="material-icons text-info">info</i></a>`;
}
}
]
table = $(table_html).DataTable({
pageLength: 10,
buttons: [
{
text: 'Reset Filters',
action: function ( e, dt, node, config ) {
yadcf.exResetAllFilters($(table_html).DataTable());
}
}
],
sDom: "<'row'<'col-sm-4'l><'col-sm-4'B><'col-sm-4'i>><'row'<'col-sm-12'tr>><'row'<'col-sm-12'p>>",
lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
serverSide: true,
ajax: url,
processing: true,
deferRender: false,
responsive: true,
//stateSave: true,
bAutoWidth: false,
bSortCellsTop: true,
columns: columns,
order: [0, 'desc']
});
yadcf.init(table, [
{
column_number: 0,
filter_type: "range_number"
},
{
column_number: direction == 'in' ? 1 : 3,
filter_type: "multi_select",
select_type: 'select2',
sort_as: 'none'
},
{
column_number: 2,
filter_type: "multi_select",
select_type: 'select2',
sort_as: 'none'
},
//3rd is the 1
{
column_number: 4,
filter_type: "custom_func",
select_type: 'select2',
sort_as: 'none',
custom_func: myCustomFilterFunction,
data: [{
value: 'Donna',
label: 'Donna'
}, {
value: 'sad',
label: 'Sad'
}, {
value: 'angry',
label: 'Angry'
}, {
value: 'lucky',
label: 'Lucky'
}, {
value: 'january',
label: 'January'
}],
filter_default_label: "Custom func filter"
}
],
{filters_tr_index: 1}
);
由于您设置 searching
false,自定义函数无法正常工作。更改代码
oTable = $('.mytable2').DataTable({
pageLength: 10,
scroller: false//,
//Should not disable the searching function
//searching: false
});
试试这个更新后的 code snippet
我无法通过 yadcf 找到解决方案,所以最后我实现了自己的排除切换,并将排除切换状态添加到 AJAX DataTables 发送的数据。
ajax: {
url: url,
data: function(data, settings) {
var table = $(`#${settings.sTableId}`); //get current table
table.find('.exclude_toggle').each(function(idx, element){
var field = $(element).attr('field');
var exclude = $(element).attr('exclude');
var column = _.find(data.columns, column => column.data == field);
column.search.exclude = JSON.parse(exclude.toLowerCase());
});
return data;
}
}, [...]
对于排除切换,您可以使用
$(`#${table_id}`).DataTable().ajax.reload();
在单击事件中强制 DataTables 向服务器发送新请求。