2012-05-12 89 views
1

我有一個骨幹集合和兩個按鈕。我想要做的是如果我點擊button1它應該按名稱排序集合,如果按鈕2被點擊,它應該按類別排序。按名稱和按類別排序骨幹集合

我想這

comparator : function(model){ 
    return model.get("Name"); 
} 

我的問題是我可以有兩個比較器在我的收藏?我將如何分別按名稱和類別對收藏進行分類。有任何想法嗎?由於

回答

7

你可以排序變量附着在收集和使用,在比較:

App.List = Backbone.Collection.extend({ 
     initialize: function() { 
     this.sortVar = 'Name'; 
     }, 
     comparator: function(model){ 
     return model.get(this.sortVar); 
     } 
    }) 

然後,只需改變sortVar被點擊的鏈接,並調用排序()。

0

做它用sortBy方法(它來自下劃線,但它可用於Backbone.Collection)的另一種方式:與方法,你只需通過在模型屬性名。請注意,sortBy方法返回一個數組。

這裏我有一個獨立的按鈕視圖。觸發排序事件可以使其他視圖(例如,處理列表呈現的視圖)響應排序事件並重新呈現它們自己。

app.ButtonsView = Backbone.View.extend({ 

     el: '#buttons', 

     events: { 
      'click #sortByNameBtn' : 'sortByName', 
      'click #sortByCategoryBtn' : 'sortByCategory' 
     }, 

     sortByName : function(){ 
      app.mycollection.models = app.mycollection.sortBy('name'); 
      app.mycollection.trigger('sort');              
     }, 

     sortByCategory : function(){      
      app.mycollection.models = app.mycollection.sortBy('category'); 
      app.mycollection.trigger('sort');                  
     } 
    }); 

參考:http://backbonejs.org/docs/backbone.html(搜索sortBy)

使用sortBy 的「排序」事件將不會被解僱所以這就是爲什麼我觸發它自己的集合。 此外,sortBy可能不適用於日期屬性或其他複雜排序,因此使用比較器。