2011-12-08 20 views
2

コレクションで最初にrequiredフラグを設定し、次にvalueをアルファベット順に並べ替えることができます。コンパレータを使用して複数の属性でソートするにはどうすればよいですか?

現在、私のコードは次のようになります:

var myModel = Backbone.Model.extend({ 
    defaults: { 
     required: true, 
     value: '', 
     ... 
    } 
}; 

var myCollection = Backbone.Collection.extend({ 
    model: myModel, 
    comparator: function (model) { 
     return -model.get('required'); 
    } 
}); 

myCollection.create([ 
    {value: 'A', required: false}, 
    {value: 'B', required: true}, 
    {value: 'C', required: false}, 
    {value: 'D', required: false}, 
    {value: 'E', required: true} 
]); 

コンパレータが必要な最初のことで私のモデルをソートしますが、私はまた、それらをアルファベット順にソートする方法として損失でね。現在のビューは、彼らが

E, B, D, C, A

を出て、それらをレンダリングするとき、私は彼らがレンダリングされたい:

B, E, A, C, D

+0

[Javascript、複数の列に配列をソートするにはどうすればいいですか?](http://stackoverflow.com/questions/2784230/javascript-how-do-you-sort-an-array-on-multiple -columns) –

+1

私はBackboneについてのもう一つの質問に答えました。それは比較しないので、間違って命名されている "コンパレータ"アーキテクチャです。実際の設計上の欠陥だと思います。 – Pointy

+0

問題は、私が比較する2つのアイテムを比較する方法がわからないということです。 – JaredMcAteer

答えて

4

あなたの「コンパレータ」は値と文字列化バージョンからなる文字列を返すことができますあなたの好きなように物事を注文するあなたのブール "必要な"プロパティの:

comparator: function(model) { 
    return (model.required ? "0" : "1") + model.value; 
} 

そのように、値「A」は、「必須」フラグに応じて「0A」または「1A」として比較される。

+0

あなたはこのコメントの最初の部分を削除したので、あなたの答えを修正しました。 Ps。あなたの答えに対するリンクは 'コンパレータ'アーキテクチャについて議論していますが、私はそれを読んでいます。編集: – JaredMcAteer

+0

ああ私はpontificateか何か;私はちょうど私がそれを見たときにそれが変わったと思った、そして今、私は思い出された。たとえば、文字列を逆順にソートすることを検討してください。どのように文字列の "否定的な"バージョンを作成しますか? – Pointy

+0

[Here](http://stackoverflow.com/questions/5013819/reverse-sort-order-with-backbone-js)は、問題を説明するStackoverflowの質問です(私は関与しません)。 – Pointy

関連する問題