From 52c460bc12d2127f1c76d6052b71f7f272acbc82 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Wed, 17 Nov 2010 14:50:39 -0500 Subject: [PATCH] Allowing collections to remove models by either Cid or Id (prefering cid). --- backbone.js | 2 +- test/collection.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/backbone.js b/backbone.js index 12f8b846..eb758ae2 100644 --- a/backbone.js +++ b/backbone.js @@ -536,7 +536,7 @@ // hash indexes for `id` and `cid` lookups. _remove : function(model, options) { options || (options = {}); - model = this.getByCid(model); + model = this.getByCid(model) || this.get(model); if (!model) return null; delete this._byId[model.id]; delete this._byCid[model.cid]; diff --git a/test/collection.js b/test/collection.js index 59d0f22d..c08d07a8 100644 --- a/test/collection.js +++ b/test/collection.js @@ -70,6 +70,30 @@ $(document).ready(function() { equals(col.length, 4); equals(col.first(), d); }); + + test("Collection: remove in multiple collections", function() { + var modelData = { + id : 5, + title : 'Othello' + }; + var passed = false; + var e = new Backbone.Model(modelData); + var f = new Backbone.Model(modelData); + f.bind('remove', function() { + passed = true; + }); + var colE = new Backbone.Collection([e]); + var colF = new Backbone.Collection([f]); + ok(e != f); + ok(colE.length == 1); + ok(colF.length == 1); + colE.remove(e); + equals(passed, false); + ok(colE.length == 0); + colF.remove(e); + ok(colF.length == 0); + equals(passed, true); + }); test("Collection: fetch", function() { col.fetch();