如何使用比较器按多个属性排序?

时间:2011-12-08 15:19:21

标签: javascript sorting backbone.js comparator

我希望能够先按照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

1 个答案:

答案 0 :(得分:4)

你的“比较器”可以返回一个字符串,该字符串由你的布尔“必需”属性的值和字符串化版本组成,它将按照你想要的方式排序:

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

这样,值“A”将被比作“0A”或“1A”,具体取决于“必需”标志。