JQuery Datatables 外部按钮过滤器
JQuery Datatables external button filter
使用 AngularJS,我有一个 DataTable() 在服务器端模式下工作,使用 YADCF 过滤器。
现在我需要在 table 之外添加一些按钮来过滤 DataTable...
代码来自myApp.controller
var table = $('#tbl').DataTable({
stateSave: true,
stateDuration: -1,
//sRowSelect: "multi",
language: sharedProperties.getLanguageDatatable(),
dom: '<"toolbar">T<"clear">lfrtip',
"columnDefs": [
{ "data": "processosId", "targets": 0, "visible": false, "searchable": false },
{ "data": "utilizadoresId", "targets": 1, "visible": false, "searchable": false },
{ "data": "entidadesId", "targets": 2, "visible": false, "searchable": false },
{ "data": "numero", "targets": 3 },
{ "data": "nomeEntidade", "targets": 4, "visible":entidadeCol },
{ "data": "nomeUtilizador", "targets": 5, "visible":utilizadorCol },
{ "data": "estado", "targets": 6 },
],
serverSide: true,
ajax: {
"url": urlProcessos,
"error": function (reason) {
if (reason.status == 401) { // Not Authorized
self.location = '#/logout';
}
}
},
});
yadcf.init(table,
[
{ column_number: 3, filter_type: 'text', filter_default_label: "" },
{ column_number: 4, filter_type: 'text', filter_default_label: "" },
{ column_number: 5, filter_type: 'text', filter_default_label: "" },
{ column_number: 6, filter_type: 'text', filter_default_label: "", },
]);
$scope.newProcess = function () {
table.columns(6).search('Novo').draw();
}
$scope.openProcess = function () {
table.columns(6).search('Aberto').draw();
}
来自 html 页面的代码:
<a href="#" >
<div class="col-sm-3" ng-click="newProcess()">
<div class="xe-label">
<strong class="num">{{contagens.novos}}</strong>
<span>Novos Processos</span>
</div>
</div>
</a>
<a href="#" >
<div class="col-sm-3" ng-click="openProcess()">
<div class="xe-label">
<strong class="num">{{contagens.abertos}}</strong>
<span>Processos Abertos</span>
</div>
</div>
</a>
<table class="table table-striped table-bordered table-hover" id="tbl" width="100%" style="width: 100%;">
<thead>
<tr class="replace-inputs">
<th>Id</th>
//and so on...
</tr>
</thead>
<tbody></tbody>
</table>
当我单击 NewProcess 的按钮时,将调用 newProcess() 函数,使用正确的过滤器向服务器发出请求,但在没有过滤器的情况下立即发出另一个请求...
如Fiddler上所示:
尝试注释掉 yadcf.init
代码,看看会发生什么,
但即使如此:
1) 您可以将带有 yadcf 的过滤器放在 table 之外,例如第三列的过滤器 http://yadcf-showcase.appspot.com/DOM_source.html
2) 您可以使用 yadcf api 以编程方式触发 yadcf 过滤器,就像这样 yadcf.exFilterColumn(table, [[6, 'Novo']], true);
好的,所以它与 yadcf 无关,你应该在你的代码中查找可能的冗余搜索调用,我建议你打开 chrome 的开发工具并在控制台中右键单击并标记复选框在 Log XMLHttpRequests 旁边,然后清除控制台并单击 problematic 搜索按钮,您将看到 ajax (XHR) 调用您的服务器,展开它并检查调用堆栈...看看您是否在那里找到有用的东西...
在您的情况下,是 <a href="#"
进行了页面刷新并导致另一个没有过滤器的调用...
p.s
我是yadcf的作者
使用 AngularJS,我有一个 DataTable() 在服务器端模式下工作,使用 YADCF 过滤器。 现在我需要在 table 之外添加一些按钮来过滤 DataTable...
代码来自myApp.controller
var table = $('#tbl').DataTable({
stateSave: true,
stateDuration: -1,
//sRowSelect: "multi",
language: sharedProperties.getLanguageDatatable(),
dom: '<"toolbar">T<"clear">lfrtip',
"columnDefs": [
{ "data": "processosId", "targets": 0, "visible": false, "searchable": false },
{ "data": "utilizadoresId", "targets": 1, "visible": false, "searchable": false },
{ "data": "entidadesId", "targets": 2, "visible": false, "searchable": false },
{ "data": "numero", "targets": 3 },
{ "data": "nomeEntidade", "targets": 4, "visible":entidadeCol },
{ "data": "nomeUtilizador", "targets": 5, "visible":utilizadorCol },
{ "data": "estado", "targets": 6 },
],
serverSide: true,
ajax: {
"url": urlProcessos,
"error": function (reason) {
if (reason.status == 401) { // Not Authorized
self.location = '#/logout';
}
}
},
});
yadcf.init(table,
[
{ column_number: 3, filter_type: 'text', filter_default_label: "" },
{ column_number: 4, filter_type: 'text', filter_default_label: "" },
{ column_number: 5, filter_type: 'text', filter_default_label: "" },
{ column_number: 6, filter_type: 'text', filter_default_label: "", },
]);
$scope.newProcess = function () {
table.columns(6).search('Novo').draw();
}
$scope.openProcess = function () {
table.columns(6).search('Aberto').draw();
}
来自 html 页面的代码:
<a href="#" >
<div class="col-sm-3" ng-click="newProcess()">
<div class="xe-label">
<strong class="num">{{contagens.novos}}</strong>
<span>Novos Processos</span>
</div>
</div>
</a>
<a href="#" >
<div class="col-sm-3" ng-click="openProcess()">
<div class="xe-label">
<strong class="num">{{contagens.abertos}}</strong>
<span>Processos Abertos</span>
</div>
</div>
</a>
<table class="table table-striped table-bordered table-hover" id="tbl" width="100%" style="width: 100%;">
<thead>
<tr class="replace-inputs">
<th>Id</th>
//and so on...
</tr>
</thead>
<tbody></tbody>
</table>
当我单击 NewProcess 的按钮时,将调用 newProcess() 函数,使用正确的过滤器向服务器发出请求,但在没有过滤器的情况下立即发出另一个请求...
如Fiddler上所示:
尝试注释掉 yadcf.init
代码,看看会发生什么,
但即使如此:
1) 您可以将带有 yadcf 的过滤器放在 table 之外,例如第三列的过滤器 http://yadcf-showcase.appspot.com/DOM_source.html
2) 您可以使用 yadcf api 以编程方式触发 yadcf 过滤器,就像这样 yadcf.exFilterColumn(table, [[6, 'Novo']], true);
好的,所以它与 yadcf 无关,你应该在你的代码中查找可能的冗余搜索调用,我建议你打开 chrome 的开发工具并在控制台中右键单击并标记复选框在 Log XMLHttpRequests 旁边,然后清除控制台并单击 problematic 搜索按钮,您将看到 ajax (XHR) 调用您的服务器,展开它并检查调用堆栈...看看您是否在那里找到有用的东西...
在您的情况下,是 <a href="#"
进行了页面刷新并导致另一个没有过滤器的调用...
p.s
我是yadcf的作者