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使用日期将它们分开,然后对它们进行排序,但我不确定如何实现……感谢您的帮助