0

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

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”排序。

我该怎么做 ?

4

2 回答 2

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');
于 2013-07-30T06:09:49.063 回答
0

如果它是常规集合/数组,则按照其他答案的建议使用下划线。如果是 Backbone Collection,那么您可以使用该comparator属性

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

然后它应该保持自己的排序顺序。如果你需要你也可以打电话

SomeCollection.sort();
于 2013-07-30T07:45:15.980 回答