コレクションから次のモデルまたは前のモデルを取得するいくつかの異なる方法を見てきましたが、それを実装することにした方法について誰かアドバイスを提供できるかどうか疑問に思っていました. 私のコレクションは順序付けされていますが、ソートしている 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("next") や getElement("prev") などを実行して、コレクション内の次または前のモデルを要求します。getElement から返されるのは、インデックスではなく実際のモデルです。collection.indexOf については知っていますが、最初にモデルを開始せずにコレクションをループする方法が必要でした。この実装は必要以上に難しいですか?