私はdeferred-updatesプラグインでknockoutjs 2.0を使用しています。次のように、リストをページ分割するように設計されたビューがあります。
function PaginatedView(label, items, size) {
var self = this;
this.label = ko.observable(label);
// List of all items to display
this.list = ko.observableArray(items);
// List that contains the items on the current page
this.rows = ko.observableArray([]);
this.pageSize = ko.observable(size || 5);
this.pageIndex = ko.observable(0);
function populateList() {
var size = self.pageSize();
var start = self.pageIndex() * size;
self.rows( self.list.slice(start, start + size) );
console.log(self.label() + ": Set rows to range", start, start + size - 1);
}
// if the deferEvaluation value is true, no items are ever displayed
ko.computed(populateList, null, {deferEvaluation: false});
this.maxPageIndex = ko.computed(function() {
return Math.ceil(this.list().length / this.pageSize()) - 1;
}, this);
this.pageList = ko.computed(function() {
var pages = [];
for (var p = 0; p <= self.maxPageIndex(); p++)
pages.push(p+1);
return pages;
});
this.goToPage = function(p) {
p--;
if (p>=0 && p<=self.maxPageIndex())
self.pageIndex(p);
}
};
私のアプリケーションでは、オブジェクトのさまざまなリストをページ分割する複数のビューを作成します。populateList()
人々が実際に見ているアイテムを追跡する目的で、ビューが実際に表示される準備が整うまで、(上記の関数で) ページネーションの計算を延期したいと思います。
deferEvaluation
オプションをfalseに設定することで、deferred-updatesプラグインでこれを達成できると思いました。しかし、それを行うと、出力がまったく表示されません。問題を説明するために、jsfiddle を使用して小さなテスト ケースを作成しました。値を false に設定すると、リストが選択される前にコンソールに 2 行の出力が表示されます。値を true に設定すると、リスト要素は表示されません。
私は何を間違っていますか?