получение следующей и предыдущей модели из коллекции

Я видел несколько разных способов получить следующую или предыдущую модель из коллекции, но мне было интересно, может ли кто-нибудь дать совет о том, как я решил это реализовать. Моя коллекция упорядочена, но идентификатор, по которому я сортирую, не обязательно будет последовательным. Гарантируется только уникальность. Предположим, что меньшие идентификаторы являются «старыми» записями в коллекции, а более крупные идентификаторы — «более новыми».

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, но мне нужен был способ перебора коллекции без предварительного запуска модели. Является ли эта реализация сложнее, чем должна быть?

15
задан Sneaky Wombat 18 April 2012 в 18:18
поделиться