0

Я использую EasyUI вместе с портлетом Liferay MVC. Я применил файловую картографию серверов и фильтр DataGrid на одном и том же datagrid. Без фильтра DataGrid разбиение на страницы работает нормально. Но когда я применяю фильтр, на следующей странице страницы нет данных. После многих усилий я обнаружил, что в JS DataGrid-фильтр плагина (DataGrid-filter.js) они сделали этот код для пагинации:EasyUI Filter and serverside pagination jquery Conflict

if (opts.pagination){ 
    var dg = $(this); 
    var pager = dg[name]('getPager'); 
    pager.pagination({ 
     onSelectPage:function(pageNum, pageSize){ 
      opts.pageNumber = pageNum; 
      opts.pageSize = pageSize; 
      pager.pagination('refresh',{ 
       pageNumber:pageNum, 
       pageSize:pageSize 
      }); 

      //dg.datagrid('loadData', state.filterSource); 
      dg[name]('loadData', state.filterSource); 
     }, 
     onBeforeRefresh:function(){ 
      //dg('reload'); 
      dg[name]('reload'); 
      return false; 
     } 
    }); 
    if (name == 'datagrid'){ 
     var start = (opts.pageNumber-1)*parseInt(opts.pageSize); 
     var end = start + parseInt(opts.pageSize); 
     data.rows = data.rows.slice(start, end); 
    } else { 
     var topRows = []; 
     var childRows = []; 
     $.map(data.rows, function(row){ 
      row._parentId ? childRows.push(row) : topRows.push(row); 
     }); 
     data.total = topRows.length; 
     var start = (opts.pageNumber-1)*parseInt(opts.pageSize); 
     var end = start + parseInt(opts.pageSize); 
     data.rows = $.extend(true,[],topRows.slice(start, end).concat(childRows)); 
    } 
} 

Теперь, если я закомментировать эту строку:

dg[name]('loadData', state.filterSource); 

, тогда разбиение на страницы работает правильно, но затем фильтр ничего не отвечает. Как я могу решить эту проблему?

ответ

1

Для решения этой проблемы необходимо выполнить следующие действия:

  1. Убедитесь, что remoteFilter является false (по умолчанию является ложным);
  2. Не используйте предел и смещение в вашем SQL запросе

Понимание

В нормальном пейджинг, при нажатии на следующей или предыдущей, то EasyUi посылает параметры с лимитом и смещение к серверу, ограничивающее результаты по странице. При использовании фильтра, если remoteFilter - false, таблица разбиения на страницы происходит локально. Таким образом, вам не нужно использовать ограничение и смещение для получения всех результатов.

Пример

$('#table').datagrid({ 
     your code here.... 
    }).datagrid('enableFilter'); 

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

  • Нет связанных вопросов^_^