Показать сообщение отдельно
  #3 (permalink)  
Старый 22.10.2012, 12:50
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 182

Дополню. При datatype='local' грид полагает, что ему передана не отдельная группа записей, а все данные. Это приводит к следующему эффекту: к примеру я получаю с сервера (чтобы ускорить загрузку) 20 записей и информацию о том, что их 10000. Далее дополняю их пустыми объектами:
...
success: function (data) {
var total = data[total];
var rows = data['rows']
while (rows.length < total) {
rows[rows.length] = {}
}

В таком виде мои 20 записей будут отображены на первой странице. Я переопределил обработчики кнопок пролистывания, чтобы они получали новую партию данных, но у меня упорно отображались записи в таблице undefined на всех страницах кроме первой. В итоге я пришел к выводу, что нужно смещать записи в массиве прежде, чем отдать его в jqgrid
var offset = 0;
                        if (typeof void null != typeof data['rowNum'] && data['rowNum'] != null &&
                            typeof void null != typeof data['page'] && data['page'] != null) {
                            offset = (data['page'] - 1) * data['rowNum'];
                            }
                        if (!isNaN(offset)) {
                            offset = 0;
                        }
                        var rdata = [];
                        while (rdata.length < offset) {
                            rdata[rdata.length] = {};
                        }
                        for (var i = 0; i < data['rows'].length; i++) {
                            rdata[rdata.length] = data['rows'][i];
                        }
                        while (rdata.length < data['total']) {
                            rdata[rdata.length] = {};
                        }
Ответить с цитированием