2014-05-14 78 views
0

我需要訂購具有兩列降序的集合,但firts考慮第一個訂單的第一列,然後第二個一,一列僅僅是一個標誌(0和1),另一個包含日期,我想在顯示這樣排序收集與兩列首先一列,然後由第二個在Backbone.js

1的方式對數據進行排序,2014年5月20日

1,5/15/2014

0,5/30/2014

0,2014年5月25日

0,2014年4月11日

這是我的代碼看起來像,但不工作,我不知道我做錯了。

extendCollection: function(Collection) { 
    _.extend(Collection.prototype, { 

     comparator : function(model) { 
      var dateCreated = new Date(model.get('dateCreated')).getTime(); 
      return model.get('isFavorited') > dateCreated ? -1 : 1; 
     } 

    }); 
    return Collection; 
} 

回答

-1

這是一個黑客位,但這應該做的工作:

return -model.get("isFavorited") * Math.pow(10, 20) - dateCreated 

感謝以下修正。

+0

我試過,並返回數據的升序,如果我嘗試[-model.get(「isFavored」),dateCreated];]它返回isFavorited列以正確的順序,但dateCreated升序順序,我需要的日期以降序顯示:( – filistea

+0

嘗試'[-model.get(「isFavored」),-dateCreated];' – nils

+0

我試過了,但得到的結果與'[-model.get (「isFavored」),dateCreated]' – filistea

2

fine manual

比較collection.comparator
[...]比較器可以被定義爲一個sortBy(通過一個函數,一個參數),作爲排序(傳遞需要兩個參數的比較器函數),或作爲指示要排序的屬性的字符串。

請注意,比較器可以帶兩個參數。如果使用的是雙參數comparator那麼邏輯是好的和簡單:

comparator: function(a, b) { 
    var a_fav, b_fav, a_date, b_date; 

    a_fav = a.get('isFavorited'); 
    b_fav = b.get('isFavorited'); 
    if(a_fav > b_fav) 
     return -1; 
    if(a_fav < b_fav) 
     return 1; 

    a_date = new Date(a.get('dateCreated')); 
    b_date = new Date(b.get('dateCreated')); 
    if(a_date > b_date) 
     return -1; 
    if(a_date < b_date) 
     return 1; 

    return 0; 
} 

不奇怪映射兩輪牛車或需要的廢話,只是簡單的對比一目瞭然的邏輯。處理多個排序鍵,反向字符串排序和其他非平凡的排序任務時,幾乎總是會使用Array.prototype.sort-樣式的兩個參數comparator

如果您在您的parse方法中以及設置新值時將dateCreated字符串屬性轉換爲實際Date實例,情況會更簡單。

相關問題