我抓了一個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調用閱讀純文本文件和(在我的例子10)viewModel.pageSize的屬性設置爲一個值,並且工作正常。返回對象數組的數據調用更新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個對象跳轉到「fields」observablearray中的所有剩餘對象。我不明白爲什麼?第一次通過它正確地設置它爲10,然後當它執行切片以獲得下一個10時,它會這樣做,但似乎將所有剩餘的對象追加到10之後。這就像在視圖模型中的pagedRows函數中「要獲取的項目數量」出錯。
我毫不懷疑這將是一個簡單的誤解我的名義,但我現在難倒了。一直看着這一整天,我的初學者技能無法整理出來。
此外,與「maxPageIndex」觸發歸零的比較失敗,它只是不斷增加!
感謝幫助。我在下面添加了答案。 – TheMook 2013-04-08 07:55:09
-1,這兩個狀態是不正確的。 'peek()'不應該用於一般訪問,只適用於特殊情況下的訪問,您不希望計算髮生。其次,名稱更改是可選的,'dependantObservable'仍然映射到相同的函數。 – Tyrsius 2013-04-08 15:37:18