2016-11-27 2 views
0

Я новичок, когда дело доходит до javascript. Я использую плагин jsGrid для отображения сетки в браузере. Заголовки столбцов сетки будут иметь значения «Request Status» и «Request Id». Я могу заставить его работать со статическими данными.jsGrid plugin - Как фильтровать с помощью удаленных данных?

(function() { 
    var adminDashboardController = { 
     loadData: function(filter) { 
      return $.grep(this.requests, function(request) { 
       return (!filter.Status || request.Status === filter.Status) 
       && (!filter.RequestId || request.RequestId.indexOf(filter.RequestId) > -1) 
      }); 
     }, 

     insertItem: function(insertingReq) { 
     }, 

     updateItem: function(updatingReq) { 
     }, 

     deleteItem: function(deletingReq) { 
     } 
    }; 

    window.adminDashboardController = adminDashboardController; 

    adminDashboardController.status = [ 
     { Name: ""}, 
     { Name: "Requested"}, 
     { Name: "Declined"} 
    ]; 

    //This is the static data 
    adminDashboardController.requests = [ 
     { "Status": "Requested", "RequestId": "1"}, 
     { "Status": "Declined", "RequestId": "2"} 
    ]; 
}()); 

Но когда дело доходит до извлечения данных из вызова Ajax (с помощью файла JSON для тестирования в качестве источника данных), данные больше не фильтруется, когда я выбираю «запрашиваемое» или «Отклонено», как критерий фильтрации. Я использую формат, указанный в документации, такой как:

(function() { 
    var adminDashboardController = { 
     loadData: function (filter) { 
      return $.ajax({ 
       type: "GET", 
       dataType: "json", 
       url: "/json/db514.json", 
       data: filter 
      }); 
     }, 
     insertItem: function(insertingReq) { 
     }, 

     updateItem: function(updatingReq) { 
     }, 

     deleteItem: function(deletingReq) { 
     } 
    }; 

    adminDashboardController.status = [ 
     { Name: ""}, 
     { Name: "Requested"}, 
     { Name: "Declined"} 
    ]; 
}()); 

Я не могу понять, как реализовать фильтрацию в этом случае!

ответ

0

Причина в том, что фильтрация должна быть реализована в коде.

В целом это можно сделать:

  1. на клиенте (так же, как в первом образце)
  2. на внутреннем интерфейсе, то вы должны пройти через фильтр к конечной точке, которая будет делать фильтрацию и возвращать данные.
  3. комбинированный подход (частично на внутреннем интерфейсе и после того, как на клиенте)

В вашем случае вы можете либо добавить конечную точку на внутреннем интерфейсе, который будет загружать JSon и фильтр данных, или до сих пор фильтрация на стороне клиента, например:

loadData: function (filter) { 
    return $.ajax({ 
     type: "GET", 
     dataType: "json", 
     url: "/json/db514.json" 
    }).then(function(requests) { 
     return $.grep(requests, function(request) { 
      return (!filter.Status || request.Status === filter.Status) 
      && (!filter.RequestId || request.RequestId.indexOf(filter.RequestId) > -1) 
     }); 
    }); 
} 

Checkout этот вопрос на GtiHub https://github.com/tabalinas/jsgrid/issues/32.