我正在尝试在运行dojo.store.JsonRest存储的dijit.form.FilteringSelect中分页结果。服务器接收范围标题,解析它并相应地返回正确数量的结果,以及“items [start] - [end] / [total]”格式的Content-Range标题。但是,范围似乎没有被使用,就好像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,而是为其分配了Deferred对象。随后,results.total未设置为在dijit.form._ComboBoxMenuMixin.createOptions中正确使用以下条件:
// Try to determine if we should show 'more'...
if(results.total && !results.total.then && results.total != -1){
该条件失败,结果.total.then作为函数存根存在,并且else被命中,导致结果列表的长度与pageSize进行比较。这意味着结果会在到达最后一页之前正确分页,如果与pageSize返回的结果数量完全相同,它将显示“更多选项”。