我已經看到了幾種不同的方式從集合中獲取下一個或以前的模型,但想知道是否有人可以提供一些建議,以便我決定實施它。我的收藏是有序的,但我排序的ID不保證是連續的。它只保證是唯一的。假設較小的ID是集合的「較舊」條目,較大的ID是「較新」。從集合中獲取下一個和以前的模型
MyCollection = Backbone.Collection.extend({
model: MyModel,
initialize:function(){
this.getElement = this._getElement(0);
},
comparator: function(model) {
return model.get("id");
},
_getElement: function (index){
var self = this;
return function (what){
if (what === "next"){
if (index+1 >= self.length) return null;
return self.at(++index);
}
if (what === "prev"){
if (index-1 < 0) return null;
return self.at(--index);
}
// what doesn't equal anything useful
return null;
};
}
});
當使用getElement,我不喜歡的東西getElement(「下一步」)而getElement(「上一頁」),要求我的集合中的一個或下一個模型。從getElement返回的是實際模型,而不是索引。我知道關於collection.indexOf,但我想要一種方式來循環一個集合,而不需要先創建一個模型。這個實現比它需要的更難嗎?
我喜歡你的一些想法,特別是在初始化方法中使用this.at()。雖然你的代碼雖然很長。如果沒有其他人提出任何更好和/或更簡潔的建議,您將得到綠色檢查:-)我的方法更短,並且在到達任何一端時通過返回null來防止脫落到集合的末尾。 – 2012-04-18 16:52:42
您可以通過拋棄'set/getElement'函數並直接訪問'currentElement'值來縮短它。 – abraham 2012-04-20 03:03:59
如果使用v0.9 +,你需要有this.setElement(this.at(0));目前在創建集合之後調用的初始化函數中。這是因爲在Collection創建模型之前調用initialize。例如:var myCollection = new MyCollection(data); myCollection.setElement(this.at(0)); – 2012-07-17 01:43:00