1

バックボーン コレクションと 2 つのボタンがあります。私がしたいのは、button1 をクリックするとコレクションを名前でソートし、button2 をクリックするとカテゴリでソートすることです。

私はこれを試しました

comparator : function(model){
     return model.get("Name");
}

私の質問は、コレクションに 2 つのコンパレーターを含めることができますか? コレクションを名前とカテゴリ別に並べ替える方法を教えてください。何か案は?ありがとう

4

2 に答える 2

7

ソート変数をコレクションにアタッチして、コンパレーターで使用できます。

    App.List = Backbone.Collection.extend({
      initialize: function() {
        this.sortVar = 'Name';
      },
      comparator: function(model){
        return model.get(this.sortVar);
      }
    })

次に、リンクがクリックされたときにsortVarを変更し、sort()を呼び出します。

于 2012-05-12T13:03:43.847 に答える
0

それを行う別の方法は、sortByメソッドを使用することです (アンダースコアに由来しますが、Backbone.Collection で使用できます)。このメソッドでは、モデル プロパティ名を渡すだけです。sortBy メソッドは配列を返すことに注意してください。

ここでは、ボタンの独立したビューがあります。並べ替えイベントをトリガーすると、他のビュー (リストのレンダリングを処理するビューなど) が並べ替えイベントに応答して再レンダリングできるようになります。

app.ButtonsView = Backbone.View.extend({

        el: '#buttons',

        events: {
            'click #sortByNameBtn' : 'sortByName',
            'click #sortByCategoryBtn' : 'sortByCategory'
        },

        sortByName : function(){
            app.mycollection.models = app.mycollection.sortBy('name');  
            app.mycollection.trigger('sort');                                                       
        }, 

        sortByCategory : function(){                    
            app.mycollection.models = app.mycollection.sortBy('category');  
            app.mycollection.trigger('sort');                                                                       
        }
    });

参照: http://backbonejs.org/docs/backbone.html (sortBy で検索)

sortBy を使用すると、「ソート」イベントは発生しないため、コレクションで自分でトリガーします。また、並べ替えが複雑な Date プロパティやその他のプロパティでは、sortBy が機能しない場合があるため、そのためにはコンパレータを使用してください。

于 2015-05-27T02:24:12.937 に答える