Практическое руководство. Фильтрация на стороне сервера с помощью JsGrid

Я новичок в JsGrid. В настоящее время я загружаю данные через вызов Ajax, используя свойство «данные» конфигурации JsGrid. Однако я хочу разрешить пользователю фильтровать данные. Я понимаю, что это может быть сделано на стороне клиента или на стороне сервера. У меня нет предпочтений, но если я выберу серверную часть, похоже, мне нужен «контроллер» и реализовать функцию «loadData». Однако код, который я видел, отправляет параметр «фильтр» функции «loadData» в атрибут «данные» вызова $.ajax().

Мой API написан на Node.js (Express и Body-Parser); что я могу ожидать получить в своем API? Будет ли это документ JSON с парами поле:значение всех отфильтрованных значений, введенных пользователем в текстовые поля? Если это так, я полагаю, мне нужно отправить эти значения в мою хранимую процедуру (используя Tedious)?

Я знаю, звучит очевидно, но прежде чем я начну идти по этому пути, я хочу убедиться, что иду в правильном направлении.

Заранее спасибо!

Вот мой код прототипа (еще не выполнил):

    var db = {
        loadData: (filter)=>{
            $.ajax({
                type: 'GET',
                    url: '/kudosapi/report?member=1',
                    data: filter,
                    dataType: 'json',
                    error: (xhr,status,error)=>{
                        errorHandler(xhr,status,error);
                    },
                    success: (data)=>{
                        // Load grid
                    }
            });
        }
    }

person Ishmael    schedule 06.04.2019    source источник


Ответы (1)


Чтобы заставить его работать на стороне сервера, вам нужно реализовать pageLoading: true и pageIndex: n и вернуть данные и их длину.

Вот пример того, как я это решил

$("#my-table").jsGrid({
          width: "100%",
          filtering: true,
          inserting: false,
          editing: false,
          sorting: true,
          paging: true,
          pageSize: 4,
          autoload: true,
          pageLoading: true,
          pageIndex: 1,
          controller: {
            loadData: function (filter) {
              var d = $.Deferred();
              var url = "your url";
              $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                data: filter
              }).done(function (response) {
                 d.resolve(response);
              });

              return d.promise().then(function(data) {
                var startIndex = (filter.pageIndex - 1) * filter.pageSize;
                return {
                      data: data(startIndex, startIndex + filter.pageSize),
                      itemsCount: data
                };
             });

            }

          },

          fields: []
});

person dagerzuga    schedule 22.08.2019