私はテーブルにレンダリングされるバックボーンコレクションを持っています。私はテーブルが "task_status"、 "task_group"のような特定の属性に基づいてソート可能にしたいと思います。私はcollection.comparator、nd collection.sortに関するバックボーンのドキュメントを読んでいます。 これをどのように行うことができますか?モデル属性に基づくバックボーンコレクションのソート
答えて
comparator
関数は、コレクション内の2つのモデルを比較するために使用され、必要な(一貫した)方法でそれらを比較できます。特に、それはあなたがあなたのコレクションでは、このようなものかもしれないので、使用する属性をどのモデルを選択することができます。
initialize: function() {
this.sort_key = 'id';
},
comparator: function(a, b) {
// Assuming that the sort_key values can be compared with '>' and '<',
// modifying this to account for extra processing on the sort_key model
// attributes is fairly straight forward.
a = a.get(this.sort_key);
b = b.get(this.sort_key);
return a > b ? 1
: a < b ? -1
: 0;
}
をして、あなただけのsort_key
を変更して呼び出すために、コレクションのいくつかのメソッドを必要とするsort
:
sort_by_thing: function() {
this.sort_key = 'thing';
this.sort();
}
古いバックボーンでは、sort
を呼び出すと"reset"
イベントが発生しますが、新しいバージョンでは"sort"
イベントが発生します。
// in the view...
initialize: function() {
this.collection.on('reset sort', this.render, this);
}
デモ:あなたは、両方のイベントに耳を傾け、再レンダリングすることができ、両方のケースカバーするhttp://jsfiddle.net/ambiguous/7y9CC/
をまた、あなたはゾンビを避けるためにlistenTo
の代わりon
を使用することができます。
initialize: function() {
this.listenTo(this.collection, 'reset sort', this.render);
}
@ mu-is-too-shortさんの回答は良いですが、フィールドを比較する簡単な方法はありません値:
フィールドに基づいてコレクションを並べ替える最も簡単な方法は、並べ替える正確なフィールドの値を返すコンパレータ関数を提供することです。この種のコンパレータでは、Backboneがsort
の代わりにsortBy
関数を呼び出すため、その複雑な比較が自分自身で実行され、ロジックについて心配する必要はありません。
このように、本質的には、注文を決定するための高度なニーズがない限り、複雑なコンパレータ機能を提供する必要はありません。この後
var myCollection = Backbone.Collection.extend({
sort_key: 'id', // default sort key
comparator: function(item) {
return item.get(this.sort_key);
},
sortByField: function(fieldName) {
this.sort_key = fieldName;
this.sort();
}
});
あなただけがソートしたいキーを表す文字列とコレクションのsortByField
-functionを呼び出すことができます。たとえば は:
collection.sortByField('name');
のデモ-余りに短いです私@更新:jylaurilの答えは途方もなく出て助け@http://jsfiddle.net/NTez2/39/
この例は、バックボーンがソート時にresetイベントを発生させないため、動作しなくなります。ソートイベントが発生します。 –
ヘッドアップありがとう!私はその変更に対応するようにサンプルを更新しました:http://jsfiddle.net/NTez2/39/ – jylauril
単一引数コンパレータ(と '_.sortBy')の大きな問題は、昇順と降順の間で切り替えることができないことです任意の正常な方法で文字列に。数字の降順は簡単ですが、文字列を否定することは簡単ではありません。また、複数のキーを1つの文字列にマッシュすることなく並べ替えることはできません。 –
、それが投稿されましたので、デモ(バックボーンでおそらくわずかな変化を修正するために必要な?)
ソート後にレンダリングをトリガーする必要があるようです。はい、 `>`と `<`作業:http://jsfiddle.net/NTez2/13/
- 1. Laravel 5.2入力フィールドに基づくモデル属性を設定
- 2. Railsは関連モデルの属性に基づいてエントリをソートします
- 3. 属性のforに基づくCSSターゲットラベル?
- 4. 属性に基づくLinqクエリ
- 5. Magento:属性セットに基づくテンプレート
- 6. 属性に基づいてjsonオブジェクトをソートする
- 7. 5th tdのiタグ属性値に基づくフィルタ表の行
- 8. Magentoの属性に基づく商品リスト
- 9. ActiveRecordモデルをサブモデル属性でソートする?
- 10. 属性に基づくレール関連制限レコード
- 11. 変更可能な属性に基づくTreeSetコンパイラ
- 12. データ属性に基づくjQueryフィルタ要素
- 13. 属性値(XMLスキーマ)に基づく条件
- 14. Railsは別の属性の値に基づいてモデル属性を検証します
- 15. バックボーンコレクション/モデルのベストプラクティス
- 16. jsonに基づくイオン性のスタイリング
- 17. モデルの属性に基づいていくつかのデータを自動入力する
- 18. 親モデルの日付に基づいてモデルをソートするDjangoクエリ
- 19. 多型モデルのバックボーンコレクション
- 20. 多くの関連するエンティティの1つに基づくソート
- 21. タイムスタンプに基づく弾性検索クエリ
- 22. CSSのクラスに基づくリンクのtitle = ""とalt = ""属性からのストリップhtml
- 23. 仮想属性に基づいてactiverecord属性を設定します
- 24. ループ内のデータ属性に基づくjQuery検証ルールの追加
- 25. Backbone.jsモデルの従属属性
- 26. HTML属性へのMVCモデル属性
- 27. モデル属性が
- 28. 属性に基づいたピボット解除のXML文書
- 29. Rails:XMLのモデル属性
- 30. Rails:属性に基づいて部分的にグループ化する
私はソートフィールドが文字列 – MrFoh
@MrFohている状況でこのパターンを使用することができます。私の-で余りに短いのデモ@更新
文字列では、デモの 's'属性は文字列です。 –
Backboneはソート時にresetイベントを発生させないため、この例はもう機能しません。ソートイベントが発生します。 –