【问题标题】:JQuery Datatables external button filterJQuery Datatables 外部按钮过滤器
【发布时间】:2015-01-06 18:41:45
【问题描述】:

使用 AngularJS,我有一个 DataTable() 在服务器端模式下工作,使用 YADCF 过滤器。 现在我需要在表格之外添加一些按钮来过滤 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 所示:

【问题讨论】:

    标签: angularjs jquery-datatables yadcf


    【解决方案1】:

    尝试注释掉yadcf.init 代码,看看会发生什么,

    但即使是这样:

    1)您可以将带有 yadcf 的过滤器放置在表格之外,例如第三列的过滤器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) 调用,展开它并检查调用堆栈...看看您是否在那里找到有用的东西...

    在您的情况下,是 &lt;a href="#" 正在刷新页面并导致另一个没有过滤器的调用...


    附言

    我是yadcf的作者

    【讨论】:

    • 感谢您的回复,让作者回答总是很高兴 :) 不幸的是,您的建议没有奏效...如果我评论 yadcf.init 所有过滤器都会消失(这不能发生)。使用yadcf.exFilterColumn(...) 不会调用 WebApi,因为它应该......只需重新加载表而不过滤......
    • 再做一些测试,我意识到exFilterColumn(...) 在第一次调用时工作(但问题仍然存在,在正确的 API 调用后,另一个调用没有过滤)但是如果我按下另一个按钮将激活exFilterColumn 它不起作用。我必须刷新页面才能应用过滤器...
    • 我的意思是,您应该评论 yadcf.init 并尝试使用您的 table.columns(6).search('Novo').draw(); 并查看它对您的工作方式(在没有过滤器之后它是否仍然发送另一个请求)?跨度>
    • 关于您的最后一条评论,评论 init 并使用 search() 产生相同的结果。第一次用正确的过滤器调用,第二次用现有的过滤器调用......例如,如果我按下“newProcess()”按钮,它将被新的过滤器过滤,接下来我按下openProcess()按钮,它将拨打电话为 Open Process 调用,然后调用 New Process...
    • 好的,所以它与yadcf无关,你应该在你的代码中寻找可能的冗余搜索调用,我建议你打开chrome的开发工具并在控制台中右键单击并标记下一个复选框到Log XMLHttpRequests,然后清除控制台并单击“有问题的”搜索按钮,您将看到对您的服务器的 ajax (XHR) 调用,展开它并检查调用堆栈...看看您是否在那里找到有用的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多