如何覆盖或更改主干集合上的比较器?

时间:2014-06-10 17:36:59

标签: sorting backbone.js comparator

我有一个名为Topics的主干集合,在我的应用程序的一个实例中,我希望按照我称为view_count的属性进行排序。

Topics集合的另一个实例我希望按字母顺序按name排序。

目前,在集合上,我有一个比较器:

  comparator: (topic) -> 
     return topic.get('view_count') * -1

当我希望按name而不是view_count对集合进行排序时,覆盖或更改比较器/排序选项的优雅方法是什么?我试图在主题集合bu的每个初始化上声明比较器函数,但似乎没有正常工作。

1 个答案:

答案 0 :(得分:1)

将您的收藏更改为:

var Topics = Backbone.Collection.extend({
  initialize: function(options) {
    this.sortProperty = options.sortProperty;
  },
  comparator: function(topic) {
    if(this.sortProperty == "view_count")
      return topic.get("view_count") * -1;
    else
      return topic.get("name");
  }      
});

然后当你实例化你的收藏时:

var topics1 = new Topics({sortProperty : "view_count"});
var topics2 = new Topics({sortProperty : "name"});

您还可以在使用以下命令初始化集合后更改排序属性:

topics1.sortProperty = "name";