2016-03-02 2 views
1

У меня есть jqGrid, который указывает на внешний API, с которым я не контролирую. Этот внешний API, имеет две конечные точки:jqGrid set records count

  • данных конечных точек - возвращает данные строки таблицы
  • Count Конечная точка - Возвращает нумерации страниц отсчетов и т.д.,

на основе ввода пользователя Для jqGrid фильтра преобразуется в соответствующую строку запроса для фильтрации внешних API Данные и Подсчет Конечные точки.

У меня есть jqGrids url динамично построен на основе от пользовательского ввода и нацелена на данные конечных точке ... и во время loadBeforeSend() случае он вызывает Count Endpoint, чтобы получить последнюю информацию о постраничной, основанной на фильтре пользователей.

Я использую jsonreader возможности:

jsonReader: { 
        root: 'products', 
        id: 'id', 
        records: function() { 

         return gridTotal; 
        }, 
        total: function() { 
         // var totalPages = (gridTotal + reqOptions.limit-1)/reqOptions.limit; 
         var totalPages = Math.ceil(gridTotal/reqOptions.limit); 
         console.log('totalPages: ' + totalPages); 
         return totalPages; 
        }, 
        page: function() { 
         //var totalPages = Math.ceil(gridTotal/20); 
         console.log('currentPage: ' + reqOptions.page); 
         return reqOptions.page; 
        } 
       }, 

Пример метода loadBeforeSend:

loadBeforeSend: function (xhr, settings) { 
    settings.url = _newUrl || endpointURL; 

    // Lets fetch our data count...this may change as items get published so lets fetch during load 
    products.count(accessToken, _filterQuery) 
     .success(function (resp) { 
      // This is the total number of products that match our current search 
      gridTotal = resp.count; 
     }).catch(function (err) { 
      console.error(err); 
     }); 
} 

Fetching из данных конечных точек работает очень хорошо, вопрос в том, как назвать Count Конечная точка и обновите данные разбивки на страницы.

Пробовал следующее:

  • Использование setGridParam для записей, LAST_PAGE и т.д.,
  • Использование getGridParam('reccount')
  • Просто обновить HTML, чтобы выглядеть правильно (не действует, так как пейджинг будет выключен)

Есть ли способ до

  • Вручную отключить XHR для URL-адреса jqgrid ... поэтому я могу сначала запросить счетчик и когда он вернется, а затем перейдите к Data?
  • Rerun функциональность jsonreader после возврата графа и gridTotal установлен
  • Используйте обещание как структура для решения подсчитывать записи

Обновлено показать @Oleg Раствора

loadBeforeSend: function (xhr, settings) { 
     settings.url = _newUrl || endpointURL; 

     // Lets fetch our data count...this may change as items get published so lets fetch during load 
     products.count(accessToken, _filterQuery) 
      .success(function (resp) { 
       // This is the total number of products that match our current search 
       gridTotal = resp.count; 
gridTotal = resp.count; 
          grid.jqGrid('setGridParam', { 
           page: gridOpts.jsonReader.page(), 
           records: gridTotal, 
           lastpage: gridOpts.jsonReader.total() 
          }); 
          grid[0].updatepager(false, true); 
      }).catch(function (err) { 
       console.error(err); 
      }); 
    } 

ответ

2

I надеюсь, что я правильно понимаю вашу проблему. В этом случае вы можете сначала загрузить основные данные из Данные Конечная точка.Тогда (внутри loadComplete) вы можете начать новый запрос$.ajax вручную, чтобы получить данные из графа Endpoint и обновлять данные внутри нумерации страниц из success обратного вызова из $.ajax.

Что вам нужно сделать для обновления Пейджер:

  1. установка page, records и lastpage параметров jqGrid на основе данных, возвращенного из графа Endpoint.
  2. звонок $("#grid")[0].updatepager(false, true);, который будет использовать вышеуказанные параметры и обновить информацию на пейджере.

Вы можете увидеть в the old answer и примере использования .updatepager(false, true).

+0

Да, ваше понимание вопроса верное, я надеялся, что я объясню его достаточно хорошо, хорошая работа =) ... Отлично, я наткнулся на этот «старый ответ», но «pageServer», «recordsServer» и «lastpageServer» 'были пустыми. Вместо того, чтобы захватывать «getGridParam» с помощью этих полей, я просто вспоминаю свои функции jsonreader. Большое спасибо!! @Oleg #FTW #Again – afreeland

+0

@afreeland: Добро пожаловать! – Oleg

Смежные вопросы