コレクションを定義するときは、コンパレータも定義します。私は最近このようにしました:
comparators: {
id: function(animal) {
return Number(animal.get("id"));
},
d_id: function(animal) {
return -Number(animal.get("id")); // descending
},
name: function(animal) {
return animal.get("name");
},
d_name: function(animal) {
return String.fromCharCode.apply(String, _.map(animal.get("name").split(""), function (c) {
return 0xffff - c.charCodeAt();
})
);
},
}
これらは、コレクションコード内で定義しました。
次に、コレクションビューをレンダリングする際に、これを実行しました(これは、コレクション全体をレンダリングするビュー内にありますinitialize()
。
this.collection = new MyCollection();
this.collection.comparator = Collection.comparators[// here I put 'id' or 'd_id' etc. ];
this.collection.sort();
このコードはビューの初期化に含まれているため、ビューを初期化するときにコンパレータを定義し、次のようなコンパレータの名前を渡すことができます。
var directory = new pageView("d_id");
そして、initialize(comparator_id)
これを初期化でコードに渡すことができます。
this.collection = new MyCollection();
this.collection.comparator = Collection.comparators[comparator_id];
this.collection.sort();
そして、ビュー/ページのレンダリングと再レンダリングにコレクションを使用できます
編集:
これがBackboneのcollection.comparatorドキュメントであり、そのすぐ下に次の説明があります。sort()
基本的に、コンパレータは、プロパティを返すモデルまたは関数のプロパティ、または数値の場合は降順の負のプロパティ、または文字列またはここで示した例のように降順の逆の値にすることができます。
したがって、コンパレータは「id」、「name」、「-id」、「-name」などのプロパティを返します(文字列の場合、単に「負」にすることはできません。より複雑な関数を適用する必要があります。私が書いたように。)