Есть ли способ загрузить страницу данных json страницу за страницей в jsGrid? - PullRequest
0 голосов
/ 15 мая 2018

Я использую jsgrid . Я пытаюсь поместить 5000 JSON реестров в сетку, но загружаю страницу за страницей. Например, я не хочу читать все 5000 реестров одновременно, я настроил сетку для отображения 50 реестров по страницам и хочу получать реестры только по мере необходимости. В данный момент я делаю пейджинговую сетку, но всегда читаю весь json. Вот мой код контроллера:

controller: {
loadData: function(filter) {
  var def = $.Deferred();
  $.ajax({
    url: "http://www.json-generator.com/api/json/get/clGvbnRZmG?indent=2", //5000
    //url: "http://www.json-generator.com/api/json/get/cpERCWvHzC?indent=2", //5
    dataType: "json",
    data: filter
  }).done(function(response) {
    var startIndex = (filter.pageIndex - 1) * filter.pageSize;
    var filteredArray = response;

    //if filter is passed
    if (filter.name !== "") {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.name.includes(filter.name);
      });
    } if (filter.age !== undefined) {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.age === filter.age;
      });
    } if (filter.email !== "") {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.email.includes(filter.email);
      });
    } if (filter.gender !== "") {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.gender === filter.gender;
      });
    }

    //if sorting is passed
    if (filter.hasOwnProperty("sortField")) {
      if (filter.sortOrder === "asc") filteredArray.sort(ascPredicateBy(filter.sortField));
      else filteredArray.sort(descPredicateBy(filter.sortField));
    }
    var da = {
      data: filteredArray.slice(startIndex, startIndex + filter.pageSize),
      itemsCount: filteredArray.length
    };
    def.resolve(da);
  });

  return def.promise();
}

Как вы можете видеть, я использовал slice, чтобы получить часть массива объекта для отображения на этой странице.

Возможно ли это? Я не знаю, примерно ли это jsgrid или даже об AJAX. Я полагаю, используя AJAX, невозможно вернуть только часть JSON.

1 Ответ

0 голосов
/ 03 июля 2018

jsGrid предназначен для обработки страниц, и вы можете удалить этот кусок кода в обещании!

Чтобы разрешить jsGrid обработку пейджинга, вы устанавливаете следующее:

paging: true,
pageLoading: true,
pageSize: 50,

Тогда вашему loadData контроллеру будут переданы следующие свойства в параметре filter:

  • pageSize - количество записей, которое вы должны вернуть на странице, отличной от последней.
  • pageIndex - n -я страница ваших 5000 записей. Это определяется jsGrid, когда пользователь нажимает ссылку> или >> или ссылку на номер страницы в сетке.

Вам необходимо предоставить подходящий веб-сервис, чтобы использовать эти два параметра для возврата правильной страницы данных. Например, это может выглядеть следующим образом:

url: "/api/json/get/clGvbnRZmG/" + filter.pageSize + "/" + filter.pageIndex

И возвращаемые данные должны иметь вид:

{
  data: [ { ..first item ...}, { ..second item..}, ...],
  itemsCount: n 
}

, где itemsCount - общее количество записей, т. Е. 5000.

...