Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分类主干。使用日期和优先级收集_Javascript_Backbone.js - Fatal编程技术网

Javascript 分类主干。使用日期和优先级收集

Javascript 分类主干。使用日期和优先级收集,javascript,backbone.js,Javascript,Backbone.js,好的,我有一个集合,里面装满了某个模型的对象,这个模型包含一个日期和一个优先级,我希望它按日期排序,然后按优先级排序,我现在用这种方式实现它: App.Collections.Tasks = Backbone.Collection.extend({ model: App.Models.Task, comparator: function(model) { return model.get("date") + model.get("priority"); } }); 这是我的输出: Get

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

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月的日期应该是最后一个,我怎样才能做到这一点


谢谢

你可以这样做:

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;
    }
}
比较器:函数(模型1、模型2){ var comp=(model1.get(“日期”)+model1.get(“优先级”))- (model2.get(“日期”)+model2.get(“优先级”); if(comp<0){ 返回-1; }否则如果(补偿>0){ 返回1; }否则{ 返回0; } } 现在代码完全遵循前面提到的规范。如果这没有解决问题,那么问题不在比较器中

编辑

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,因此实际上不进行排序。因此,您现在需要做的就是将日期转换为unix时间格式(或至少类似的格式),然后它应该可以工作。

您的日期属性中存储了什么?例如:日期:“Wed Jan 30”嗯,我不确定是否遵循,第二个模型从何而来?
comparator
是在
sort
函数中内部调用的,因此您不必担心它。我尝试实现这个
App.Collections.Tasks=Backbone.Collection.extend({model:App.Models.Task,comparator:function(model1,model2){return(model1.get(“date”)+model1.get(“优先级”)-(model2.get(“日期”)+model2.get(“优先级”);})
结果是没有进行排序。它仍然导致根本没有进行排序,可能是因为我实现它的方式?我想先使用下划线.js的.groupBy使用日期将它们分开,然后对它们进行排序,但我不确定如何实现……感谢您的帮助