comparatorコレクションのメソッドを提供することで、目的を達成できます。
例:
ModelCollection = Backbone.Collection.extend({
comparator: function(a, b) {
if ( a.get("name") > b.get("name") ) return 1;
if ( a.get("name") < b.get("name") ) return -1;
if ( a.get("name") === b.get("name") ) return 0;
},
initialize: function() {
this.on('change:name', function() { this.sort() }, this);
}
});
この例では、コレクションが内部のモデルcomparatorの属性によって昇順で並べ替えられます。name
コレクションのいずれかの属性を変更しても、コレクションは自動的にソートされないことに注意してくださいmodels。デフォルトでは、並べ替えは、新しいモデルを作成してコレクションに追加するときにのみ行われます。ただし、メソッドによって使用されcomparator ますcollection.sort。
change上記のコードは、任意のsのコレクションnameをその属性に単純に再ソートするイベントリスナーを設定することにより、これを利用していますmodels。
全体像を完成させるために、コレクションに関連付けられた適切なイベントリスナーを設定して、View変更があった場合に再レンダリングされるようにします。
CollectionView = Backbone.View.extend({
initialize: function() {
this.collection = new ModelCollection();
this.collection.on('all', function() { this.render() }, this);
},
render: function() {
this.$el.html(this.collection.toJSON());
}
});
それでおしまい :)
バックボーンドキュメントからの関連する抜粋:
デフォルトではcomparator、コレクションはありません。を定義するcomparatorと、コレクションをソートされた順序で維持するために使用されます。これは、モデルが追加されると、モデルがの正しいインデックスに挿入されることを意味しますcollection.models。コンパレータは、sortBy(単一の引数を取る関数を渡す)、sort(2つの引数を期待するコンパレータ関数を渡す)、または並べ替える属性を示す文字列として定義できます。[...]後でモデル属性を変更した場合、が付いたコレクションは自動的に再ソートされないため、順序に影響するモデル属性を変更した後comparatorに呼び出すことをお勧めします。sort