我正在写一个comparator
来对列表中的项目进行排序。
对于没有结束年份的项目,他们应该在顶部。
对于结束年份的项目,他们应该是下一个。
对于具有相同结束年份的项目,开始年份最低的项目应该是下一年。
我到目前为止的东西
[item.get('end_year'), item.get('start_year')]
首先测试sceanrios是结束年份第二年是开始年份(“”存在)
"", ""
"", 2012
"", 2011
2012, 2005
2012, 2008
2011, 2011
2010, 2005
答案 0 :(得分:2)
为您的集合添加comaprator函数,该函数在'sort'函数中包含两个模型。这将在添加模型时按照排序顺序维护您的集合。请注意,如果更改单个模型的start_year或end_year,则必须手动使用该集合。
comparator: function(item1,item2) {
var y1 = {
start: item1.get('start_year'),
end: item1.get('end_year')
},
y2 = {
start: item2.get('start_year'),
end: item2.get('end_year')
};
// If one item has no end year, sort it first
if(y1.end === '' && y2.end !== '') return -1;
if(y1.end !== '' && y2.end === '') return 1;
// Sort the higher end year first
if(y1.end > y2.end) return -1;
if(y1.end < y2.end) return 1;
// Sort the lower start year first
if(y1.start < y2.start) return -1;
if(y1.start > y2.start) return 1;
return 0;
}
答案 1 :(得分:0)
真实性和咖啡:
comparator: (a, b) ->
return -1 if not a.get("end_year") and b.get("end_year")
return 1 if a.get("end_year") and not b.get("end_year")
return -1 if a.get("end_year") > b.get("end_year")
return 1 if a.get("end_year") < b.get("end_year")
return -1 if a.get("start_year") < b.get("start_year")
return 1 if a.get("start_year") > b.get("start_year")
0