Sorting 如何覆盖或更改主干集合上的比较器?
我有一个名为Sorting 如何覆盖或更改主干集合上的比较器?,sorting,backbone.js,comparator,Sorting,Backbone.js,Comparator,我有一个名为主题的主干集合,在我的应用程序中的一个实例中,我希望按照我调用的属性查看\u计数进行排序 主题集合的另一个实例,我想按名称字母顺序排序 目前,在该系列中,我有一个比较器: comparator: (topic) -> return topic.get('view_count') * -1 如果我希望集合按名称排序,而不是按查看计数排序,那么覆盖或更改比较器/排序选项的优雅方式是什么?我尝试在每次初始化主题集合bu时声明comparator函数,该函数似乎无法正
主题
的主干集合,在我的应用程序中的一个实例中,我希望按照我调用的属性查看\u计数
进行排序
主题
集合的另一个实例,我想按名称
字母顺序排序
目前,在该系列中,我有一个比较器:
comparator: (topic) ->
return topic.get('view_count') * -1
如果我希望集合按
名称
排序,而不是按查看计数
排序,那么覆盖或更改比较器/排序选项的优雅方式是什么?我尝试在每次初始化主题集合bu时声明comparator函数,该函数似乎无法正常工作。将集合更改为:
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";
这里也回答了类似的问题。希望对参考也有帮助。当你把一个字符串乘以
-1
时会发生什么?为什么你认为它是一个字符串?属性名称当然是一个字符串,但实际的模型属性可以是任何值。一旦OP知道sortBy的值,他就可以决定如何进行实际排序。他可以使用if/else根据sortBy的值进一步定制比较器,但我认为这是非常明显的。为什么你会期望称为“name”的东西是一个数字?您的示例代码将尝试将名称字符串乘以-1
,这没有任何意义,因此您的答案非常不完整。另外,简单地设置sortBy
属性也不会使用集合。我更新了答案,以防它不太清楚如何进一步自定义排序。问题不在于如何进行排序,而在于如何确定在排序中使用什么模型属性。我还将sortBy重命名为sortProperty,而不是将其与主干的sortBy混淆。这是一个自定义属性。