ページングの例を実行した 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 行が画面に表示されます。
データをページングする「ページング」関数を10秒ごとに呼び出す「window.setinterval」があります。
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」との比較は機能せず、永久に増加し続けます!