[Pkg-javascript-commits] [backbone] 165/281: nice refactor. removed _add and _remove and moved 'em in to the public API.

Jonas Smedegaard js at moszumanska.debian.org
Sat May 3 17:02:08 UTC 2014


This is an automated email from the git hooks/post-receive script.

js pushed a commit to tag 0.9.0
in repository backbone.

commit bf1ffbeb67b8f43a89eb558e376b3161173c2d1e
Author: Jeremy Ashkenas <jashkenas at gmail.com>
Date:   Wed Jan 11 13:45:16 2012 -0500

    nice refactor. removed _add and _remove and moved 'em in to the public API.
---
 backbone.js        | 54 +++++++++++++++++++-----------------------------------
 test/collection.js |  2 +-
 2 files changed, 20 insertions(+), 36 deletions(-)

diff --git a/backbone.js b/backbone.js
index 6bd30f9..dbae70b 100644
--- a/backbone.js
+++ b/backbone.js
@@ -391,7 +391,6 @@
   Backbone.Collection = function(models, options) {
     options || (options = {});
     if (options.comparator) this.comparator = options.comparator;
-    _.bindAll(this, '_removeReference');
     this._reset();
     if (models) this.reset(models, {silent: true});
     this.initialize.apply(this, arguments);
@@ -422,7 +421,13 @@
       if (!_.isArray(models)) models = [models];
       models = slice.call(models);
       for (i = 0, l = models.length; i < l; i++) {
-        models[i] = this._add(models[i], options);
+        var model = models[i] = this._prepareModel(models[i], options);
+        if (this._byCid[model.cid]) {
+          throw new Error("Can't add the same model to a set twice");
+        }
+        this._byId[model.id] = this._byCid[model.cid] = model;
+        model.bind('all', this._onModelEvent, this);
+        this.length++;
       }
       i = options.at != null ? options.at : this.models.length;
       splice.apply(this.models, [i, 0].concat(models));
@@ -440,7 +445,14 @@
       options || (options = {});
       if (!_.isArray(models)) models = [models];
       for (var i = 0, l = models.length; i < l; i++) {
-        this._remove(models[i], options);
+        var model = this.getByCid(models[i]) || this.get(models[i]);
+        if (!model) continue;
+        delete this._byId[model.id];
+        delete this._byCid[model.cid];
+        this.models.splice(this.indexOf(model), 1);
+        this.length--;
+        if (!options.silent) model.trigger('remove', model, this, options);
+        this._removeReference(model);
       }
       return this;
     },
@@ -487,7 +499,9 @@
     reset : function(models, options) {
       models  || (models = []);
       options || (options = {});
-      this.each(this._removeReference);
+      for (var i = 0, l = this.models.length; i < l; i++) {
+        this._removeReference(this.models[i]);
+      }
       this._reset();
       this.add(models, {silent: true, parse: options.parse});
       if (!options.silent) this.trigger('reset', this, options);
@@ -560,36 +574,6 @@
       return model;
     },
 
-    // Internal implementation of adding a single model to the set, updating
-    // hash indexes for `id` and `cid` lookups.
-    // Returns the model, or 'false' if validation on a new model fails.
-    _add : function(model, options) {
-      model = this._prepareModel(model, options);
-      if (!model) return false;
-      var already = this.getByCid(model);
-      if (already) throw new Error(["Can't add the same model to a set twice", already.id]);
-      this._byId[model.id] = model;
-      this._byCid[model.cid] = model;
-      model.bind('all', this._onModelEvent, this);
-      this.length++;
-      return model;
-    },
-
-    // Internal implementation of removing a single model from the set, updating
-    // hash indexes for `id` and `cid` lookups.
-    _remove : function(model, options) {
-      model = this.getByCid(model) || this.get(model);
-      if (!model) return null;
-      delete this._byId[model.id];
-      delete this._byCid[model.cid];
-      var index = this.indexOf(model);
-      this.models.splice(index, 1);
-      this.length--;
-      if (!options.silent) model.trigger('remove', model, this, options);
-      this._removeReference(model);
-      return model;
-    },
-
     // Internal method to remove a model's ties to a collection.
     _removeReference : function(model) {
       if (this == model.collection) {
@@ -605,7 +589,7 @@
     _onModelEvent : function(ev, model, collection, options) {
       if ((ev == 'add' || ev == 'remove') && collection != this) return;
       if (ev == 'destroy') {
-        this._remove(model, options);
+        this.remove(model, options);
       }
       if (model && ev === 'change:' + model.idAttribute) {
         delete this._byId[model.previous(model.idAttribute)];
diff --git a/test/collection.js b/test/collection.js
index 02f4eb2..4275003 100644
--- a/test/collection.js
+++ b/test/collection.js
@@ -144,7 +144,7 @@ $(document).ready(function() {
       col.add(a2);
       ok(false, "duplicate; expected add to fail");
     } catch (e) {
-      equals(e.message, "Can't add the same model to a set twice,3");
+      equals(e.message, "Can't add the same model to a set twice");
     }
   });
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/backbone.git



More information about the Pkg-javascript-commits mailing list