2014-02-13 83 views
2

我想按照字母順序在Backbone.js使用Coffeescript排序集合。該集合是我想要顯示的表格中的前5個對象。Backbone.js比較不排序(Coffeescript)

preview = new Collections.Bananas(@model.get('bananas').slice(0,5)) 

    preview.comparator = (banana) -> banana.get("name") 

    bananas = new BundleOfBananas.Bananas({collection: preview}) 

對象都顯示,我得到正確的數據,它只是沒有按字母順序排列。任何人都可以幫助我與Backbone.js比較?謝謝!

回答

3

一個骨幹收集各種各樣本身時,一兩件事情發生:

  1. 你添加一些車型,並有comparator定義。
  2. 您手動撥打集合上的sort,並定義comparator

當你把你的機型:

preview = new Collections.Bananas(@model.get('bananas').slice(0,5)) 

有,據推測,沒有comparator上收集所以沒有排序進行定義。然後你指定comparator屬性:

preview.comparator = (banana) -> banana.get("name") 

,但不叫preview.sort()告訴集合自行解決。

你有兩個基本的選擇:

  1. 定義比較之前添加任何。您可以使comparator功能集合定義的一部分:

    class Collections.Bananas extends Backbone.Collection 
        comparator: (banana) -> banana.get('name') 
        # as you have now... 
    

    或只使用一個屬性,因爲你被一個模型屬性排序:

    class Collections.Bananas extends Backbone.Collection 
        comparator: 'name' 
        # as you have now... 
    

    然後實例您的收藏:

    new Collections.Bananas(@model.get('bananas')[0..4]) 
    

    這會給你一個自動排序的集合。如果你想手動分配comparator因爲你正在做,現在則:

    preview = new Collections.Bananas 
    preview.comparator = 'name' 
    preview.reset(@model.get('bananas')[0..4]) 
    
  2. 手動調用sort

    preview = new Collections.Bananas(@model.get('bananas')[0..4]) 
    preview.comparator = 'name' 
    preview.sort() 
    
+0

這是偉大的,非常感謝!創建定義集合的比較函數效果很好。非常感激! – tommybond

+0

我其實還有另外一個問題。假設我總是希望一個香蕉(主要香蕉,在DB中,它有一個is_primary屬性)顯示在頂部,而不管它是否按字母順序排列。這將如何實現? – tommybond

+0

如果你的比較器是'(a,b) - > ...',那麼你必須使用兩個參數'comparator'函數,那麼它的行爲就像是一個'Array.prototype.sort'比較函數。 –