我有一个主干集合,它提供了一堆模板名称供人们使用,我想按字母顺序排序,以便更容易找到。我很不确定如何做到这一点。
我有我的骨干集合
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")
添加到主干集合中,但它只是阻止了我的代码运行。
答案 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(传递一个接受单个参数的函数),作为排序(传递一个需要两个参数的比较器函数),或者作为一个字符串来指示要排序的属性。