6

私はバックエンドのコレクションを改ページできるコレクションウィッチを持っているので、スクロールして別のアイテムのバッチをたくさん作ります。サーバー上のアイテムの数を知っています。メソッドを使用してすべてのコレクションを拡張する方法を探していgetCounterます。アイデアは、最初にサーバーカウンターを設定し、ユーザーがコレクションにアイテムを追加または削除するたびにカウンターを更新することです。これに最適なアプローチは何ですか?

add問題は、サーバーから新しいアイテムをフェッチするときにもイベントが発生することだと思います。addそれ以外の場合は、removeイベントにバインドするだけです。

4

1 に答える 1

5

どの追加と削除をカウントするか、どちらをカウントしないかを制御する必要があります。2つのオプションが思い浮かびます。

  1. オプションでカウントされるべきではないすべての操作を無音silent:trueにし、カウンターを、、addおよびremoveイベントreset 接続します。すべての場合にイベントを利用できるわけではないため、これにより、コレクションの一般的な使用にいくつかの制限が課せられます。

  2. addremoveおよびreset メソッドをオーバーライドして、カウンターを更新する必要があるかどうかを示す追加のオプションを受け入れます。何かのようなもの:

    var PaginatedCollection = Backbone.Collection.extend({
    
        initialize: function() {
            this._counter = 0;
        },
    
        add: function(models, options) {
            if(options && options.count)
                this._counter += (_.isArray(models) ? models.length : 1);
            Backbone.Collection.prototype.add.apply(this, arguments);
        },
    
        remove: function(models, options) {
            if(options && options.count)
                this._counter -= (_.isArray(models) ? models.length : 1);
            Backbone.Collection.prototype.remove.apply(this, arguments);         
        },
    
        reset: function(models, options) {
            if(options && options.count)
                this._counter = (_.isArray(models) ? models.length : 0);
            Backbone.Collection.prototype.reset.apply(this, arguments)
        }
    });
    

    count:true追加または削除されたアイテムをカウントする必要がある場合は、オプションを渡します。

    var SomeCollection = PaginatedCollection.extend({ });
    
    var someCollection = new SomeCollection();
    someCollection.add(model, { count: true });
    someCollection.remove(model, { count: true });
    

(コードサンプルはテストされていません)

于 2012-12-19T15:13:04.910 に答える