0

好的,我有一个包含某个模型的对象的集合,这个模型包含一个日期和一个优先级,我希望它按日期排序,然后按优先级,我目前以这种方式实现:

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

我希望更早的日期始终排在首位,所以 2 月的日期应该是最后一个,我怎么能做到这一点?

谢谢!

4

1 回答 1

1

你可以这样做:

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;
    }
}

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

编辑

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

于 2013-01-28T18:02:18.220 回答