I need to insert a model into a Collection at position Collection.length-2. The last model in the collection should always stay the last model in the collection.
Wh
Sorry for the brief answer (don't have time to respond), but look at defining a comparator function.
http://backbonejs.org/#Collection-comparator
Along the same suggestion as Rob Hruska, use Backbone.Collection.add() with at
in the options
object.
Pages = new Backbone.Collection([
{id:1, foo:'bar'},
{id:2, foo:'barista'} /* Last model should remain last */
]);
/* Insert new "page" not at the end (default) but length minus 1 */
Pages.add({id:3, foo:'bartender'}, { at: Pages.length - 1 });
Pages.at(0).id === 1; // true
Pages.at(Pages.length - 2).id === 3; // true
Pages.at(Pages.length - 1).id === 2; // true
You mentioned that Pages
seems to be sorted by the attribute sequence
; do you happen to have a comparator
function defined on the Pages collection?
Another question, did you want to update this attribute sequence
on ALL existing page models currently in the collection when a new page is added to the 2nd to the last position? Or was that attribute an attempt to accomplish your original question?
Backbone.Collection.add() takes an options
object that supports an at
key for specifying the index.
Pass
{at: index}
to splice the model into the collection at the specifiedindex
.
Example:
Pages.add({ foo: bar }, { at: Pages.length - 2 })