我抓住了一个 jsfiddle 的一些片段,它做了一个分页示例。我的页面顶部有这个:
var persons = []; //holds array of names/tables
var viewModel = {
fields: ko.observableArray(persons),
pageSize: ko.observable(1),
pageIndex: ko.observable(0),
};
viewModel.pagedRows = ko.dependentObservable(function() {
var size = this.pageSize();
var start = this.pageIndex() * size;
return this.fields.slice(start, start + size);
}, viewModel);
viewModel.maxPageIndex = ko.dependentObservable(function() {
return Math.ceil(this.fields().length / this.pageSize()) - 1;
}, viewModel);
然后我有一个 jquery ajax 调用来读取一个纯文本文件,并将 viewModel.pageSize 的属性设置为一个值(在我的示例中为 10)并且工作正常。返回对象数组的数据调用更新 viewModel.fields 并且前 10 行显示在屏幕上。
我有一个“window.setinterval”,它每 10 秒调用一次“分页”函数,对数据进行分页:
function paging() {
viewModel.pageIndex(viewModel.pageIndex() + 1);
if (viewModel.pageIndex() > viewModel.maxPageIndex) {
viewModel.pageIndex(0);}
}
它几乎可以工作...... pageIndex 不断增加,页面上的数据刷新并在与敲除绑定的“pagedRows”字段子集中显示正确的起点。然而,一旦第一个定时“分页”函数被调用,“pagedRows”突然从包含 10 个对象跃迁到“字段”可观察数组中的所有剩余对象。我不明白为什么?第一次通过它正确地将其设置为 10,然后当它执行切片以获取下一个 10 时,它会这样做,但似乎在它获取的 10 之后附加所有剩余的对象。这就像 viewmodel 的 pagedRows 函数中的“要获取的项目数”出错了。
我毫不怀疑这对我来说将是一个简单的误解,但我现在很难过。一整天都在看这个,我的初学者技能无法解决。
此外,与“maxPageIndex”的比较以触发返回零也无法正常工作,它只会永远增加!