定义集合时,您还定义了比较器。
我最近是这样做的:
comparators: {
id: function(animal) {
return Number(animal.get("id"));
},
d_id: function(animal) {
return -Number(animal.get("id")); // descending
},
name: function(animal) {
return animal.get("name");
},
d_name: function(animal) {
return String.fromCharCode.apply(String, _.map(animal.get("name").split(""), function (c) {
return 0xffff - c.charCodeAt();
})
);
},
}
这些是我在收藏代码中定义的。
然后,在渲染我的集合视图时,我只是这样做了
(这是在我看来呈现整个集合的,initialize():
this.collection = new MyCollection();
this.collection.comparator = Collection.comparators[// here I put 'id' or 'd_id' etc. ];
this.collection.sort();
由于此代码在您的视图的初始化中,您可以定义比较器
当你初始化你的视图,并像这样传递一个比较器的名字:
var directory = new pageView("d_id");
通过initialize(comparator_id),您可以在初始化时将其传递给您的代码:
this.collection = new MyCollection();
this.collection.comparator = Collection.comparators[comparator_id];
this.collection.sort();
然后我可以在渲染和重新渲染视图/页面时使用该集合
已编辑:
这里是Backbone's collection.comparator 文档,
并且正下方是sort()的解释
基本上,比较器可以是模型的属性或返回属性的函数,
或者一个负数属性,如果它是数字,则用于降序,
或一个字符串或其反向值以降序排列
就像我在这里给你的例子一样。
因此,比较器返回一个属性,如“id”或“name”,或“-id”、“-name”等。
(对于字符串,您不能只将其设为“负数”,您需要应用更复杂的功能,
正如我所写。)