Backbone.jsを使用して、書籍などのアイテムのリストをレンダリングしています。リストがレンダリングされた後、ユーザーがそれらをソートするためのオプションがあります。したがって、ユーザーが[タイトルで並べ替え]または[著者名で並べ替え]をクリックすると、リストはクライアント側で並べ替えられます。
window.Book = Backbone.Model.extend({
defaults: {
title: "This is the title",
author: "Name here"
},
Backboneアプリケーションのコンテキストで使用して、この種類を達成するための最良の方法は何ですか。 AppViewでjQuery domソーターを使用しますか?
このトピックに関するディスカッションをご覧ください。 https://github.com/documentcloud/backbone/issues/41 。
要するに、ユーザーが「Xで並べ替え」を選択すると、次のことができます。
comparator
関数を設定しますsort
関数を呼び出します(sort
イベントをトリガーします)sort
イベントをリッスンし、アイテムを(クリアして)再描画しますステップ1と2を処理する別の方法は、コレクションのsortBy
メソッドを呼び出して、ビューがリッスンできるカスタムイベントをトリガーする独自のメソッドを用意することです。
ただし、ビューの並べ替えとコレクションの並べ替え順序との同期を保つには、クリアと再描画が最も簡単な(そしておそらく最速の)方法であるようです。
コンパレーター関数を更新してから、sortメソッドを呼び出すことができます。
// update comparator function
collection.comparator = function(model) {
return model.get('name');
}
// call the sort method
collection.sort();
ビューは自動的に再レンダリングされます。
comparator
は必要なものです
var PhotoCollection = Backbone.Collection.extend({
model: Photo,
comparator: function(item) {
return item.get('pid');
}
});
この方法はうまく機能し、すべてのattributes
による動的なソートを可能にし、ascending
またはdescending
を処理します。
var PhotoCollection = Backbone.Collection.extend({
model: Photo,
sortByField: function(field, direction){
sorted = _.sortBy(this.models, function(model){
return model.get(field);
});
if(direction === 'descending'){
sorted = sorted.reverse()
}
this.models = sorted;
}
});