1

最初のフェッチ後にサーバーから追加のモーダルをロードしようとしていますPaginator.clientPager

これは私のコレクションで、github のサンプル コードからほとんどコピーを貼り付けたものです。

return new (Backbone.Paginator.clientPager.extend({
    model: model,
    paginator_core: {
        type: 'GET',
        dataType: 'json',
        url: '/odata/LibraryFile'
    },

    paginator_ui: {
        // the lowest page index your API allows to be accessed
        firstPage: 1,

        // which page should the paginator start from
        // (also, the actual page the paginator is on)
        currentPage: 1,

        // how many items per page should be shown
        perPage: 2,

        // a default number of total pages to query in case the API or
        // service you are using does not support providing the total
        // number of pages for us.
        // 10 as a default in case your service doesn't return the total
        totalPages: 5
    },

    server_api: {
        // number of items to return per request/page
        '$skip': function () { return this.perPage * (this.currentPage - 1) },
        '$top': function () { return this.perPage },
    },

    parse: function (response) {
        console.log(response);
        return response.value;
    }
}))();

私はそのように初期フェッチを呼び出しています

myCollection.fetch({
    success: function(){
        myCollection.pager();
    },
    silent:true
});

次に、ユーザーが clientPager を使用してローカル ページをブラウズした後、おそらく最初のページを削除せずに、さらに多くのページを読み込みたいと考えます。

私はこのようにこれを達成しようとしますが、何らかの理由でpager();、2 つの新しいレコードを呼び出した後に削除されます。

myCollection.currentPage = 2;
myCollection.fetch({
    success: function(){ 
        console.log(myCollection.length) // 4 models, with correct data
        myCollection.pager();
        console.log(myCollection.length) // the 2 new records are removed
    },
    silent:true,
    remove: false // don't remove old records
});

私は何を間違っていPaginator.clientPagerますか?

requestPager を使用したくないのは、少なくともメモリ内で事前キャッシュを行うことができないためだと思います。

4

1 に答える 1

1

私の経験では、これはBackbone.Paginator.clientPagerのpager()メソッドが原因です。ここでコードを見ることができます: Backbone.Paginator.clientPager

行 292 から行 294は、未定義の場合、Backbone.Paginator.clientPager.origModelsが現在のモデル (上の図で長さを正しくテストしたモデル) にのみ割り当てられることを示しています。問題は、ユーザーがおそらく最初の を削除せずにさらにページを読み込もうとするときまでに、初期フェッチの結果としてorigModelsプロパティがすでに設定されていることです。

これは、 pager()が希望どおりに動作する前に、明示的にorigModelsを再度未定義にする必要があることを意味します。ソース コードの296 行目で何が起こるかに注意してください(モデルは origModels のコピーに割り当てられます)。それが、あなたの 2 つの新しいレコードが削除された理由です。次のコードは、意図したとおりに機能するはずです。

myCollection.currentPage = 2;
myCollection.fetch({
    success: function(){ 
        delete myCollection.origModels; // to ensure that origModels is overridden in pager() call below
        myCollection.pager();
    },
    silent:true,
    remove: false // don't remove old records
});
于 2014-03-29T14:17:25.047 に答える