Я пытаюсь просмотреть результаты в dijit.form.FilteringSelect, который запускается из хранилища dojo.store.JsonRest. Сервер получает заголовок диапазона, анализирует его и, соответственно, возвращает правильное количество результатов вместе с заголовком Content-Range в формате "items [start] - [end] / [total]". Однако диапазон, кажется, не используется, как если бы pageSize был фактором общего числа результатов, на последней странице все еще отображается опция «Больше вариантов». Небольшое исследование показало, что в dojo.store.JsonRest.query,
results.total = results.then(function(){
var range = results.ioArgs.xhr.getResponseHeader("Content-Range");
return range && (range=range.match(/\/(.*)/)) && +range[1];
});
Блок
появляется для правильного синтаксического анализа заголовка Content-Range, однако возвращаемое значение не присваивается results.total, а вместо этого ему присваивается отложенный объект. Впоследствии results.total не настроен для правильной работы со следующим условным выражением в dijit.form._ComboBoxMenuMixin.createOptions:
// Try to determine if we should show 'more'...
if(results.total && !results.total.then && results.total != -1){
Это условие не выполняется, так как results.total.then существует в виде заглушки функции, а остальное вызывается, в результате чего длина списка результатов сравнивается с pageSize. Это означает, что результаты разбиваются на страницы должным образом до тех пор, пока не будет достигнута последняя страница, на которой будет отображаться «Дополнительные параметры», если будет возвращено точно такое же количество результатов, что и для размера страницы.