2015-01-06 174 views
1

使用AngularJS,我有一個DataTable()工作在serverSide模式,使用YADCF過濾器。 現在我需要從HTML頁面添加一些按鈕表來過濾數據表外......JQuery Datatables外部按鈕過濾器

的代碼從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(); 
    } 

代碼:

<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()函數,使用正確的過濾器向服務器發出請求,但在沒有過濾器的情況下再次發出請求...

上的提琴手所示: enter image description here

回答

1

嘗試註釋掉yadcf.init代碼,看看會發生什麼,

但即使孔說:

1)您可以將過濾器與yadcf像外面的桌子過濾將第三列http://yadcf-showcase.appspot.com/DOM_source.html

2),則可以使用yadcf API編程觸發yadcf濾波器,就像這樣yadcf.exFilterColumn(table, [[6, 'Novo']], true);


OK,所以其yadcf沒有關係的,你應該看看在你的可能的冗餘搜索調用的代碼,我建議你打開開發工具鉻和控制檯執行右鍵點擊並選中旁邊的複選框記錄XMLHttpRequests,然後清除控制檯並點擊你的有問題的搜索按鈕,你會看到ajax(XHR)調用你的服務器,展開它並檢查調用堆棧...看看你是否找到有用的東西...

在你的情況下,這是<a href="#"這是做頁面刷新,並造成另一個調用不帶過濾器...


PS

我yadcf的作者

+0

感謝您的答覆,它總是很高興有筆者回答:)不幸的是,你的建議沒有鍛鍊。 ..如果我評論'yadcf.init'所有的過濾器消失(這不可能發生)。使用'yadcf.exFilterColumn(...)'不會調用WebApi,因爲它應該...只需重新加載表,不進行過濾... – NunoRibeiro

+0

做了一些更多的測試,我意識到'exFilterColumn(...) '在第一次調用時工作(但問題依然存在,在正確的API調用另一個調用沒有過濾之後),但是如果我按另一個將激活「exFilterColumn」的按鈕,它將不起作用。我必須refreh頁面以便過濾器應用... – NunoRibeiro

+0

我的意思是,你應該評論'yadcf.init'並嘗試使用你的'table.columns(6).search('Novo')。draw( );'看看它是如何工作的(它是否仍然發送另一個請求是在沒有過濾器之後進行的)? – Daniel