最近做了一个用到了 jqGrid 的项目,在设置 rowNum 属性的时候遇到了坎坷 …
rowNum 属性的默认值为 20,当你不设置时,每页最多只给你显示 20 条数据。
但是,当我们不想设置最大的数据条数时,我们还想显示全部数据怎么办,网上说设置为 -1,这时问题就出现了,这么设置在画面上会发现数据少了一条 … 坑啊 …
为了解决这个问题,无奈只能开始调试 …
最后发现问题发生点(jquery.jqGrid.src)
var queryResults = query.select(),
recordsperpage = parseInt(ts.p.rowNum,10),
total = queryResults.length,
page = parseInt(ts.p.page,10),
totalpages = Math.ceil(total / recordsperpage),
retresult = {};
queryResults = queryResults.slice((page-1)*recordsperpage , page*recordsperpage );
query = null;
cmtypes = null;
retresult[ts.p.localReader.total] = totalpages;
retresult[ts.p.localReader.page] = page;
retresult[ts.p.localReader.records] = total;
retresult[ts.p.localReader.root] = queryResults;
retresult[ts.p.localReader.userdata] = ts.p.userData;
queryResults = null;
return retresult;
请重点看这段代码
queryResults = queryResults.slice((page-1)*recordsperpage , page*recordsperpage );
当 rowNum 属性值为 - 1 时,recordsperpage 会为 -1
此时执行.slice 函数就有问题了,此时函数相当于 queryResults.slice(0,-1),小伙伴们可以去查查.slice 函数的 API,大体意思就是
.slice(start,end) 返回区间为 start 到 end 位置的元素,请注意,如果是负数,则代表的意思是从数组尾部开始算起的元素
这回明白为什么数据会少了一条吧 …
提供一种修改方式,添加一个条件判断吧
var queryResults = query.select(),
…
if (recordsperpage != -1){
queryResults = queryResults.slice((page-1)*recordsperpage , page*recordsperpage );
}
…