Skip to content

Commit

Permalink
Merge pull request jashkenas#700 from iros/673
Browse files Browse the repository at this point in the history
jashkenas#673 - Adding index as a property on the options object that gets passed
  • Loading branch information
tbranyen committed Oct 29, 2011
2 parents fbffb36 + 80769fc commit 9982e31
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
5 changes: 4 additions & 1 deletion backbone.js
Expand Up @@ -600,6 +600,7 @@
this.models.splice(index, 0, model);
model.bind('all', this._onModelEvent);
this.length++;
options.index = index;
if (!options.silent) model.trigger('add', model, this, options);
return model;
},
Expand All @@ -612,8 +613,10 @@
if (!model) return null;
delete this._byId[model.id];
delete this._byCid[model.cid];
this.models.splice(this.indexOf(model), 1);
var index = this.indexOf(model);
this.models.splice(index, 1);
this.length--;
options.index = index;
if (!options.silent) model.trigger('remove', model, this, options);
this._removeReference(model);
return model;
Expand Down
34 changes: 34 additions & 0 deletions test/collection.js
Expand Up @@ -122,6 +122,23 @@ $(document).ready(function() {
equals(atCol.last(), h);
});

test("Collection: add model to collection and verify index updates", function() {
var f = new Backbone.Model({id: 20, label : 'f'});
var g = new Backbone.Model({id: 21, label : 'g'});
var h = new Backbone.Model({id: 22, label : 'h'});
var col = new Backbone.Collection();

var counts = [];

col.bind('add', function(model, collection, options) {
counts.push(options.index);
});
col.add(f);
col.add(g);
col.add(h);
ok(_.isEqual(counts, [0,1,2]));
});

test("Collection: add model to collection twice", function() {
try {
// no id, same cid
Expand Down Expand Up @@ -173,6 +190,23 @@ $(document).ready(function() {
equals(otherRemoved, null);
});

test("Collection: remove should return correct index events", function() {
var f = new Backbone.Model({id: 20, label : 'f'});
var g = new Backbone.Model({id: 21, label : 'g'});
var h = new Backbone.Model({id: 22, label : 'h'});
var col = new Backbone.Collection([f,g,h]);

var counts = [];

col.bind('remove', function(model, collection, options) {
counts.push(options.index);
});
col.remove(h);
col.remove(g);
col.remove(f);
ok(_.isEqual(counts, [2,1,0]));
});

test("Collection: events are unbound on remove", function() {
var counter = 0;
var dj = new Backbone.Model();
Expand Down

0 comments on commit 9982e31

Please sign in to comment.