2011-12-08 142 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

問題是,我不知道如何比較兩個項目'比較'不(似乎)給我兩個對象進行比較,只是一個。 – JaredMcAteer

回答

4

您的「比較」可以返回由值的字符串,字符串化版本你的布爾「必需」屬性將按照你想要的方式排列:

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

這樣,取決於「所需」標誌,值「A」被比較爲「0A」或「1A」。

+0

編輯您已修復答案,因此我刪除了此評論的第一部分。 PS。討論「比較器」體系結構的答案是什麼,我想讀一讀。編輯: – JaredMcAteer

+0

哦,我沒有認識或任何東西;我只是覺得第一次看到它很奇怪,現在我已經被提醒。例如,考慮以相反的順序排序字符串。你會如何製作一個「負面」的字符串版本? – Pointy

+0

[Here](http://stackoverflow.com/questions/5013819/reverse-sort-order-with-backbone-js)是一個說明這個問題的Stackoverflow問題(不涉及我)。 – Pointy

相關問題