Я видел несколько разных способов получить следующую или предыдущую модель из коллекции, но мне было интересно, может ли кто-нибудь дать совет о том, как я решил это реализовать. Моя коллекция упорядочена, но идентификатор, по которому я сортирую, не обязательно будет последовательным. Гарантируется только уникальность. Предположим, что меньшие идентификаторы являются «старыми» записями в коллекции, а более крупные идентификаторы — «более новыми».
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("next") и getElement("prev"), чтобы запросить следующую или предыдущую модель в моей коллекции. То, что возвращается от getElement, является фактической моделью, а не индексом. Я знаю о collection.indexOf, но мне нужен был способ перебора коллекции без предварительного запуска модели. Является ли эта реализация сложнее, чем должна быть?