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 呼び出しがあり、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」との比較は機能せず、永久に増加し続けます!

4

2 に答える 2

0

viewModel.maxPageIndex はdependentObservable です。つまり、この大きなファンシー オブジェクトです。だからあなたはただ参照することはできません

viewModel.maxPageIndex

計算された値が返されることを期待します。むしろ電話して

viewModel.maxPageIndex.peek()

計算された値を取得します。

これらは、dependentObservables と呼ばれなくなりましたが、計算された Observables に変更されたことに注意してください。

詳細については、http://knockoutjs.com/documentation/computedObservables.htmlのドキュメントを参照してください。

于 2013-04-08T04:27:43.707 に答える