Merge pull request #2802 from jdkanani/master

allow operation with dense array for Backbone collection
This commit is contained in:
Jeremy Ashkenas
2013-10-16 03:45:47 -07:00
2 changed files with 25 additions and 4 deletions

View File

@@ -676,7 +676,7 @@
// Turn bare objects into model references, and prevent invalid models
// from being added.
for (i = 0, l = models.length; i < l; i++) {
attrs = models[i];
attrs = models[i] || {};
if (attrs instanceof Model) {
id = model = attrs;
} else {
@@ -745,7 +745,7 @@
}
if (sort || (order && order.length)) this.trigger('sort', this, options);
}
// Return the added (or merged) model (or models).
return singular ? models[0] : models;
},

View File

@@ -107,7 +107,7 @@
equal(col.pluck('label').join(' '), 'a b c d');
});
test("add", 10, function() {
test("add", 14, function() {
var added, opts, secondAdded;
added = opts = secondAdded = null;
e = new Backbone.Model({id: 10, label : 'e'});
@@ -136,6 +136,18 @@
equal(atCol.length, 4);
equal(atCol.at(1), e);
equal(atCol.last(), h);
var coll = new Backbone.Collection(new Array(2));
var addCount = 0;
coll.on('add', function(){
addCount += 1;
});
coll.add([undefined, f, g]);
equal(coll.length, 5);
equal(addCount, 3);
coll.add(new Array(4));
equal(coll.length, 9);
equal(addCount, 7);
});
test("add multiple models", 6, function() {
@@ -556,7 +568,7 @@
deepEqual(col.difference([c, d]), [a, b]);
});
test("reset", 12, function() {
test("reset", 16, function() {
var resetCount = 0;
var models = col.models;
col.on('reset', function() { resetCount += 1; });
@@ -576,6 +588,15 @@
col.reset();
equal(col.length, 0);
equal(resetCount, 4);
var f = new Backbone.Model({id: 20, label : 'f'});
col.reset([undefined, f]);
equal(col.length, 2);
equal(resetCount, 5);
col.reset(new Array(4));
equal(col.length, 4);
equal(resetCount, 6);
});
test ("reset with different values", function(){