2013-05-16 4 views
1

Этот вопрос уже ответил несколько раз. но здесь я хочу, чтобы сайт, если код, предоставленный в документации, не может быть достигнут без дополнительных кодов, почему он был там на первом месте. Это просто вводит в заблуждение. Код, указанный в документации, достигает пейджинга, но при сортировке данные сетки просто исчезают.вводящая в заблуждение документация jqgrid: сортировка на стороне клиента, но подкачка на стороне сервера

Исправьте меня, если я ошибаюсь.

jQuery("#gridid").jqGrid({ 
... 
datatype: 'json', // can be xml 
loadComplete : function() { 
    jQuery("#gridid").jqGrid('setGridParam',{datatype:'local'}); 
}, 
onPaging : function(which_button) { 
    jQuery("#gridid").jqGrid('setGridParam',{datatype:'json'}); 
}, 
... 
}); 

ответ

1

Вы не разместили точную ссылку на документацию, в которой вы получаете код. Я нашел его here.

jqGrid - это продукт с открытым исходным кодом, который вы получаете бесплатно. Это практично, но вы должны понимать, что в случае, если продукт и его документация не могут быть идеальными. Часть кода, на которую вы ссылались, может работать, возможно, в очень старой версии jqGrid, но это неправильный код в текущей версии jqGrid. Смысл реализации «Сортировка на стороне клиента, но серверная подкачка» очень подозрительна. Мой старый ответ о предмете вы найдете here. Я бы переписал часть ответа сейчас, но в целом код, протестированный со старыми версиями, может быть несовместим с новой версией jqGrid.

0

Я могу сказать, что нет места, где преднамеренное введение в заблуждение произошло. Они дают плагин бесплатно, хотя это очень большой плагин. И работа таких людей, как Олег, делает ее более совершенной. Для вас вопрос, код, связанный с «сортировкой на стороне клиента и страничной страницей сервера», - это код, который может решить ваши проблемы. И это было сделано с помощью некоторого old answer, данного Олегом.

Это моя версия кода,

loadComplete: function(data) { 

var $this = $(this); 
if ($this.jqGrid('getGridParam', 'datatype') === 'json') { 
// because one use repeatitems: false option and uses no 
// jsonmap in the colModel the setting of data parameter 
// is very easy. We can set data parameter to data.rows: 
    $this.jqGrid('setGridParam', { 
     datatype: 'local', 
     data: data.userdata, 
     pageServer: data.page, 
     recordsServer: data.records, 
     lastpageServer: data.total 
     }); 
// because we changed the value of the data parameter 
// we need update internal _index parameter: 
    this.refreshIndex(); 
     if ($this.jqGrid('getGridParam', 'sortname') !== '') { 
// we need reload grid only if we use sortname parameter, 
// but the server return unsorted data 
    $this.triggerHandler('reloadGrid'); 
} 
} else { 
    $this.jqGrid('setGridParam', { 
    page: $this.jqGrid('getGridParam', 'pageServer'), 
    records: $this.jqGrid('getGridParam', 'recordsServer'), 
    lastpage: $this.jqGrid('getGridParam', 'lastpageServer') 
}); 
this.updatepager(false, true);} 
} 

onPaging:function(){ 
/*this code is to fix the issue when we click on next page with some data in filter tool bar 
    * along with this in grid definition(in filterToolbar) we have to return true in "beforeClear "event 
    * */ 
    var data = $(this).jqGrid("getGridParam", "postData"); 
    data._search = false; 
    data.filters=null; 
    data.page=$(this).jqGrid("getGridParam","page"); 

    /* comment this line if you disable filter toolbar*/ 
    $(this)[0].clearToolbar(); 


    //Here making _search alone false will not solve problem, we have to make search also false. like in below. 
    $(this).jqGrid('setGridParam', { search: false, postData:data }); 
    var data = $(this).jqGrid("getGridParam", "postData"); 


    /*this is to fix the issue when we go to last page(say there are only 3 records and page size is 5) and click 
    * on sorting the grid fetches previously loaded data (may be from its buffer) and displays 5 records 
    * where in i am expecting only 3 records to be sorted out.along with this there should be a modification in source code. 
    */ 

    $(this).jqGrid("clearGridData"); 

    /* this is to make the grid to fetch data from server on page click*/ 

    $(this).setGridParam({datatype: 'json'}).triggerHandler("reloadGrid"); 

} 

Для модификации, которые вы должны сделать в исходном коде, см this answer ..

+0

спасибо за размещение такой хороший ответ. Я искал что-то более компактное, например, 3-5 строк кода. Это может быть возможно только в том случае, если оно будет внедрено в код сетки. Надеюсь скоро получить его в будущих версиях! –