按字母顺序对骨干集合进行排序

时间:2015-02-09 20:25:57

标签: javascript backbone.js

我有一个主干集合,它提供了一堆模板名称供人们使用,我想按字母顺序排序,以便更容易找到。我很不确定如何做到这一点。

我有我的骨干集合

this.templates = new Backbone.Collection();

然后我会对模板进行排序,找出添加内容的位置。

var Names = this.model.collection.models.map(function(model){
  return (model.attributes.Name) ? model.attributes.Name : 'Template';
});

Names.forEach(function(name) {
  _this.templates.add(api.collections[(_this.templateType)].where({Name : name, ShowInToolBox : true}));
//adding a bunch of conditionals to add cretin forms to modules that are outside the scope 
}

是否可以按字母顺序排列这些?

我尝试将.sortBy("Name")添加到主干集合中,但它只是阻止了我的代码运行。

2 个答案:

答案 0 :(得分:2)

Backbone提供comparator属性进行排序。您可以将集合应该排序的属性的名称传递给构造函数:

this.templates = new Backbone.Collection([], { comparator: 'Name' })

每次收集更改时,都会按comparator.中的属性名称对其进行重新排序。如果您正在执行更复杂的操作,则可以将comparator定义为函数。如果你走这条路,那么为了清楚起见,我建议你扩展Backbone.Collection

var Templates = Backbone.Collection.extend({
    comparator: function(template1, template2){
        return template1.get('someValue') - template2.get('someValue')
    }
})

var templates = new Templates()

答案 1 :(得分:0)

可以使用comparator function对骨干集合进行排序。

  

如果定义比较器,它将用于按排序顺序维护集合。这意味着在添加模型时,它们将插入到collection.models中的正确索引处。比较器可以定义为sortBy(传递一个接受单个参数的函数),作为排序(传递一个需要两个参数的比较器函数),或者作为一个字符串来指示要排序的属性。