Пейджинг не работает, используя JsonRest с EnhancedGrid - PullRequest
1 голос
/ 23 марта 2012

Я создаю виджет для IBM BusinessSpace, и у меня возникают некоторые проблемы с подкачкой страниц.Данные успешно возвращаются из базы данных (с помощью рестлета) и отображаются в сетке.Навигация также отображается под сеткой (следующая страница, предыдущая страница, переход на страницу, количество страниц и т. Д.).Если у меня, например, есть 3 страницы, по 5 строк на страницу, и я хочу перейти на вторую страницу, когда я нажимаю на страницу № 2, данные перезагружаются (кажется, что рестлет вызывается снова) и первые 5 строк (отображаютсяна первой странице) показаны на этом тоже.Если я выберу любую другую опцию навигации (следующая страница, ...), произойдет то же самое.Итог, каждый клик приводит к первым 5 строкам из моей базы данных.Любая подсказка о том, как решить эту проблему?

Вот код относительно этого:

dojo.require("dojo.data.ObjectStore"); 
dojo.require("dojox.grid.enhanced.plugins.Pagination"); 
dojo.require("dojox.grid.EnhancedGrid"); 
dojo.require("dojo.store.JsonRest"); 


var restStore = new dojo.store.JsonRest({target:"https://localhost:9443/Application/hello"}); 

var dataStore = dojo.data.ObjectStore({objectStore: restStore}); 

dojo.ready(function(){ 

    var grid = new dojox.grid.EnhancedGrid({ 

        store: dataStore, <br>
        structure: [                   
            {name:"Value", field:"value", width: "auto"}, 
            {name:"RequestID", field:"requestId", width: "auto"}, 
            {name:"ID", field:"id", width: "auto"}, 
            {name:"Name", field:"name", width: "auto"} 
        ],         
        columnReordering: true, 
        clientSort: true, 
        rowSelector: '20px', 
        rowsPerPage: 5, 
        autoHeight: true, 
        plugins: {
            pagination: { 
                pageSizes: ["5", "10", "15", "All"], // page length menu options 
                description: true, // display the current position
                sizeSwitch: true, // display the page length menu
                pageStepper: true, // display the page navigation choices 
                gotoButton: true, // go to page button   
                position: "bottom" // position of the pagination bar  
            }
        } 
    }, "gridDiv");
    grid.startup(); 
});

1 Ответ

2 голосов
/ 16 мая 2012

При использовании jsonRest в сетке, когда вы прокручиваете записи, которые не показаны, еще не загружены, в этот момент jsonRest делает запрос данных, необходимых для показа, чтобы этот пейджер работал как положено, в вашей реализации остальныхчтобы использовать заголовок, который создает dojo (диапазон: 0-24), он отправляется dojo, чтобы вы знали смещение и лимит для необходимых данных; для ответа необходимо вернуть заголовок (Content-Range: items 0)-24/66), числа указывают dojo, откуда и где он должен отображаться, и сколько всего записей.

Это пример в php (предполагается, что db и response являются реальными объектами):

$range = $request->headers->get('Range');

preg_match_all ('/.*?(\d+).*?(\d+)/is', $range, $matches);

$limit = $matches[2][0];
$offset = $matches[1][0];

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT {$limit} OFFSET {$offset}";
$result = $db->execute($sql);

$sql2 = "SELECT FOUND_ROWS()";
$count = $db->execute($sql2);

$response->setContent($result);
$response->headers->set('Content-Range', "items $offset-$limit/{$count}");

В документации jsonRest есть некоторая информация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...