2012-11-15 28 views
2

使用Backbone爲模型保留任何視圖的基本方法是什麼?我有一些想法,但並不完全清楚。如何對主幹模型/視圖進行排序?

我想通過名爲「created_at」的字段使它們保持順序。我知道有能力在集合中提供比較器功能,但我不確定它是如何工作的。

我也想在集合中的這個順序被視圖在任何時候都反映出來(在一個列表中)。我不確定我在哪裏與模型綁定。我猜我在索引屬性中尋找更改,然後更新匹配?

非常感謝您的幫助或解釋!

+1

看到這個[SO回答](http://stackoverflow.com/questions/9431171/correctly-implement-backbone-comparators)。 –

回答

4

當你定義你的集合時,你也定義了比較器。 最近我這樣做了:

 comparators: { 
      id: function(animal) { 
       return Number(animal.get("id")); 
      }, 

      d_id: function(animal) { 
       return -Number(animal.get("id")); // descending 
      }, 

      name: function(animal) { 
       return animal.get("name"); 
      }, 

      d_name: function(animal) { 
       return String.fromCharCode.apply(String, _.map(animal.get("name").split(""), function (c) { 
        return 0xffff - c.charCodeAt(); 
        }) 
      ); 
      }, 
     } 

這些我在我的集​​合代碼中定義。

然後,在渲染我收集的意見,我只是做這個 (這是我的觀點,使得整個收藏,initialize()內:

this.collection = new MyCollection(); 
this.collection.comparator = Collection.comparators[// here I put 'id' or 'd_id' etc. ]; 
this.collection.sort(); 

由於這個代碼是在你的意見的初始化,您可以定義你比較 當你初始化你的觀點,並把它傳遞這樣一個比較的名字:

var directory = new pageView("d_id"); 

,比直通initialize(comparator_id)你可以在它傳遞給你的代碼itialize:

this.collection = new MyCollection(); 
this.collection.comparator = Collection.comparators[comparator_id]; 
this.collection.sort(); 

,然後我可以在渲染和重新渲染視圖/頁

編輯使用集合:

這裏是Backbone's collection.comparator文檔, 和右側下方是一個解釋sort()

基本上,比較器可以是一個模型或函數的屬性,它返回一個屬性, 或負數屬性,如果它是數字的,則爲de格陵蘭訂單, 或降序 的字符串或其反向值,如我在這裏給你的例子。

因此,比較器返回一個屬性,如「id」或「name」,或「-id」,「-name」等等 (對於字符串,你不能只是使它成爲「負面」,你需要應用更復雜的功能, 正如我寫的。)

+0

To toninoj: 我在我的代碼中做了類似的事情,它通常工作正常,但對於最新的chrome,如果我在短時間內刷新列表兩次,結果將與我的比較器相反。不確定它是如此設計的還是bug。 – user3055892

相關問題