使用日期和优先级对主干进行排序

Sorting Backbone.Collection using date and priority

本文关键字:排序 日期 优先级      更新时间:2023-09-26

好的,我有一个集合,里面装满了某个模型的对象,这个模型包含一个日期和一个优先级,我希望它按日期排序,然后按优先级排序,我目前是这样实现的:

App.Collections.Tasks = Backbone.Collection.extend({
model: App.Models.Task,
comparator: function(model) 
{
  return model.get("date") + model.get("priority");
}
});

这是我的输出:

Get to the party  Edit Delete 1 Fri Feb 1
Get to the party  Edit Delete 2 Mon Jan 28
Go to the store  Edit Delete 4 Mon Jan 28
Go to the mall  Edit Delete 3 Tue Jan 29
Get to the party  Edit Delete 3 Tue Jan 29
Get to the party  Edit Delete 5 Tue Jan 29
Get to the party  Edit Delete 2 Wed Jan 30
Get to work  Edit Delete 5 Wed Jan 30

我希望较早的日期始终位于顶部,因此二月的日期应该是最后一个,我该如何实现这一点?

谢谢!

你可以这样做:

comparator: function(model1, model2) {
    return (model1.get("date") + model1.get("priority")) -
        (model2.get("date") + model2.get("priority"));
}

文档声明,返回值应该是 -1、0 或 1,但这在以前不是强制性的,任何值都可以解决问题。

编辑

comparator: function(model1, model2) {
    var comp = (model1.get("date") + model1.get("priority")) -
        (model2.get("date") + model2.get("priority"));
    if (comp < 0) {
        return -1;
    } else if (comp > 0) {
        return 1;
    } else {
        return 0;
    }
}

现在代码完全遵循提到的规范。如果这不能解决问题,那么问题不在比较器中。

编辑

傻我。我假设你正在date存储一个 unix 时间,但显然你没有。减去字符串得到 NaN,因此实际上没有进行排序。所以你现在需要做的就是date转换为 unix 时间格式(或至少类似的东西),然后它应该可以工作了。