2012-06-25 38 views
0

我在寻找编写comparator将我的项目排序在列表中。排序顺序结束年份和开始年份

对于没有结束年份的项目,它们应该位于顶部。

对于结束年的项目,他们应该是下一个。

对于结束年份相同的项目,开始年份最低的项目应该是下一个。

东西我至今

[item.get('end_year'), item.get('start_year')]

测试sceanrios首先是结束今年二是启动年(“”存在的话)

"", "" 
"", 2012 
"", 2011 
2012, 2005 
2012, 2008 
2011, 2011 
2010, 2005 
+0

可以粘贴分类样本数据的一个小例子,你想要的方式?很难从描述中确切地告诉你要求什么。 –

+0

加了kennis :) – maletor

+0

我很确定mysql把它当作'end_date asc,start_date desc'来处理。 – maletor

回答

2

添加comaprator功能到您的收藏是需要“排序”功能中的两个模型。这将在模型添加到它时按照排序顺序维护您的集合。请注意,如果您更改单个模型的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; 
} 
+0

是!需要注意的是这取决于骨干网0.9.3或者是下划线的分类。 – maletor

+1

@mu太短,对你编辑的东西感到好奇;我没有看到任何差异。这是一个错字吗? – jackwanders

+0

你在'return 0'之上有一个流浪的'}',这显然只是一个错误,所以我修复了它。 –

0

随着感实性和coffescript:

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 
+1

你应该说你想喝杯咖啡,我本可以救自己一些击键:) – jackwanders