使用Backbone爲模型保留任何視圖的基本方法是什麼?我有一些想法,但並不完全清楚。如何對主幹模型/視圖進行排序?
我想通過名爲「created_at」的字段使它們保持順序。我知道有能力在集合中提供比較器功能,但我不確定它是如何工作的。
我也想在集合中的這個順序被視圖在任何時候都反映出來(在一個列表中)。我不確定我在哪裏與模型綁定。我猜我在索引屬性中尋找更改,然後更新匹配?
非常感謝您的幫助或解釋!
使用Backbone爲模型保留任何視圖的基本方法是什麼?我有一些想法,但並不完全清楚。如何對主幹模型/視圖進行排序?
我想通過名爲「created_at」的字段使它們保持順序。我知道有能力在集合中提供比較器功能,但我不確定它是如何工作的。
我也想在集合中的這個順序被視圖在任何時候都反映出來(在一個列表中)。我不確定我在哪裏與模型綁定。我猜我在索引屬性中尋找更改,然後更新匹配?
非常感謝您的幫助或解釋!
當你定義你的集合時,你也定義了比較器。 最近我這樣做了:
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」等等 (對於字符串,你不能只是使它成爲「負面」,你需要應用更復雜的功能, 正如我寫的。)
To toninoj: 我在我的代碼中做了類似的事情,它通常工作正常,但對於最新的chrome,如果我在短時間內刷新列表兩次,結果將與我的比較器相反。不確定它是如此設計的還是bug。 – user3055892
看到這個[SO回答](http://stackoverflow.com/questions/9431171/correctly-implement-backbone-comparators)。 –