2013-04-07 66 views
0

我抓了一個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」觸發歸零的比較失敗,它只是不斷增加!

回答

0

viewModel.maxPageIndex是dependentObservable。這意味着它是這個大花哨的對象。因此,您不能僅僅參考

viewModel.maxPageIndex 

並期望得到計算值。相反,撥打

viewModel.maxPageIndex.peek() 

將計算得到的值返回。

請注意,它們不再被稱爲dependentObservables,但已被更改爲計算的observables。

有關更多信息,請參見http://knockoutjs.com/documentation/computedObservables.html處的文檔。

+0

感謝幫助。我在下面添加了答案。 – TheMook 2013-04-08 07:55:09

+0

-1,這兩個狀態是不正確的。 'peek()'不應該用於一般訪問,只適用於特殊情況下的訪問,您不希望計算髮生。其次,名稱更改是可選的,'dependantObservable'仍然映射到相同的函數。 – Tyrsius 2013-04-08 15:37:18

0

所以,有幾個問題。

首先,我使用的是老式的「dependentObservable」而不是「computed」,但這不是問題,因爲它仍然以這種方式工作!

其次我在呼叫方法錯過送行「pageMaxIndex」末括號:

if (viewModel.pageIndex() > viewModel.maxPageIndex()) { 

現在的作品,並不需要「窺視」到返回值。

切片問題是因爲我的json調用返回頁面大小的字符串值。添加到偏移量時,會導致結果爲連接字符串,而不是數字結果。我結束了「1020」而不是「30」!

感謝來自CodeThug的指針