Я видел несколько разных способов получить следующую или предыдущую модель из коллекции, но задавался вопросом, может ли кто-нибудь предложить некоторые советы по тому, как я решил ее реализовать. Моя коллекция упорядочена, но идентификатор, который я сортирую, не гарантированно будет последовательным. Он гарантированно будет уникальным. Предположим, что меньшие идентификаторы являются "более старыми" элементами коллекции, а большие идентификаторы "более новые".
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, но мне нужен способ прокрутки коллекции без предварительного запуска модели. Является ли эта реализация сложнее, чем она должна быть?