2

Pluralsight で SPA を構築するための John Papa の素晴らしいビデオを見てきました。

現在、セッションページのページネーションを実装しようとしていますが、これが正しい方法であるかどうかわかりません。誰かが同様のことを試みた場合、フィードバックをいただければ幸いです。

これが私がやったことです。

セッション.html


  <section>
    <footer>
        <ul class="pager">
            <li>
                <button class="btn btn-info btn-small" data-bind="click: previous, enable:canPrev"><i class="icon-angle-left"></i>Previous</button>
            </li>
            <li>
                <button class="btn btn-info btn-small" data-bind="click: next, enable: canPrev">Next<i class="icon-angle-right"></i></button>

            </li>
        </ul>
    </footer>
</section>

セッション.js


   var  currentPage = ko.observable(), 

   activate = function () {
        currentPage(0);
        return datacontext.getSessionPartials(sessions);
   },

   previous = function () {
        currentPage(currentPage() - 1);
        return datacontext.getSessionPartials(sessions, true, currentPage());
    },

    canPrev = ko.computed(function () {
        return currentPage() > 0;
    }),

    canNext = ko.computed(function () {
        //return currentPage > 0;
    }),

    next = function () {
        currentPage(currentPage() +1);
        return datacontext.getSessionPartials(sessions, true, currentPage());
    },

   var vm = {
        //existing stuff plus the following:
        previous: previous,
        next: next,
        currentPage: currentPage,
        canPrev: canPrev,
        canNext: canNext,
    };

datacontext.js


 var query = EntityQuery.from('Sessions')
            .select('id, title, code, speakerId, trackId, timeSlotId, roomId, level, tags')
            .skip(currentPage * 5).take(5)                
            .orderBy('timeSlotId, level, speaker.firstName')
            .inlineCount(true);

inlineCount の結果をセッションの viewModel に追加する方法がわからないため、canNext を除いて、これは機能します。最善の方法は何ですか?

4

2 に答える 2

1

Breeze を使用すると、必要な数の行を取得できます。これは、Breeze がエンティティ マネージャーに行をキャッシュするためです。次に、必要なものだけをページに表示します。したがって、ページ サイズが 20 の場合、必要に応じて 40 を取得してから 20 を表示します。そうすれば、次の 20 が既にあり、別のページがあるかどうかがわかります。この方法で仮想ページングをシミュレートできます。わかりました、まあ、エレガントではありませんが、機能します:)

もう 1 つのオプションは、コールにレコード カウントを設定することです。Breeze を使用して総レコード数を取得する方法があるかもしれないと Breeze 関係者が言っていたことをぼんやりと思い出します。具体的に思い出せないので、彼らに声をかけてもらいます。

カウントを取得するのと同じ呼び出しを使用してデータを取得する場合は、データ コンテキスト内のエンティティに値を設定できます。または、セッションとカウントを含むラッパー オブジェクトをメソッドから返すこともできます。このようなもの...

// inside the datacontext method's querySucceeded
// data is your session data you got back
// rowCount is the number of total rows.

return { sessions: data, rowCount: rowCount };
于 2013-04-06T12:35:13.070 に答える