如何对骨干模型中的列表进行排序?

时间:2013-07-30 05:19:53

标签: jquery backbone.js

我有一个具有以下定义的骨干模型

var ABCModel = Backbone.Model.extend({
    defaults: function() {
        return {
            Id: -1,
            Name: "",
            SomeCollectionABC: "",
            SomeCollectionXYZ: ""
        };
    }
});

现在SomeCollectionABC中的值具有以下格式:

[
    Object { Id=28, Day="MON", Score=0, more...},
    Object { Id=25, Day="TUE", Score=7, more...},
    Object { Id=25, Day="MON", Score=7, more...},
    Object { Id=25, Day="WED", Score=7, more...},
]

对于这个模型我动态添加和删除对象,我希望能够使用不同的属性对此列表进行排序,比如有时我想用'Id'排序,有时候会按'Day'排序。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用underscore.js的_.sortBy函数。

_.sortBy(ABCModel.get('SomeCollectionXYZ'), function(obj) {
    // your sorting logic
});

或类似的东西:

 var ABCModel = Backbone.Model.extend({
 // your existing code ...

 sortXYZ:function(param) {
   var result = _.sortBy(this.get('SomeCollectionXYZ'), 
     function(obj) { 
       return obj[param];
      });
   return result; // or this.set({SomeCollectionXYZ:result});
  }
});

ABCModel.sortXYZ('Day'); // or ABCModel.sortXYZ('Id');

答案 1 :(得分:0)

如果它是常规集合/数组,则使用下划线作为另一个答案建议。如果它是Backbone Collection,那么您可以使用comparator属性

var SomeCollection = Backbone.Collection.extend({
    comparator: function(model){
         return model.get('someProperty');
     }
}

然后它应该保持自己的排序顺序。如果您需要,也可以致电

SomeCollection.sort();