[Pkg-javascript-commits] [backbone] 48/101: sets can fire 'error' events for all models within, as well.

Jonas Smedegaard js at moszumanska.debian.org
Sat May 3 16:58:28 UTC 2014


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

js pushed a commit to tag 0.1.0
in repository backbone.

commit da07cedb0f6a3ead78730b8269f5bde523c1d3ab
Author: Jeremy Ashkenas <jashkenas at gmail.com>
Date:   Thu Oct 7 10:02:06 2010 -0400

    sets can fire 'error' events for all models within, as well.
---
 backbone.js | 50 +++++++++++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 19 deletions(-)

diff --git a/backbone.js b/backbone.js
index babd243..9ad40b0 100644
--- a/backbone.js
+++ b/backbone.js
@@ -81,13 +81,19 @@
 
     // Trigger an event, firing all bound callbacks. Callbacks are passed the
     // same arguments as `trigger` is, apart from the event name.
+    // Listening for `"all"` passes the true event name as the first argument.
     trigger : function(ev) {
+      var list, calls, i, l;
       var calls = this._callbacks;
-      for (var i = 0; i < 2; i++) {
-        var list = calls && calls[i ? 'all' : ev];
-        if (!list) continue;
-        for (var j = 0, l = list.length; j < l; j++) {
-          list[j].apply(this, _.rest(arguments));
+      if (!(calls = this._callbacks)) return this;
+      if (list = calls[ev]) {
+        for (i = 0, l = list.length; i < l; i++) {
+          list[i].apply(this, _.rest(arguments));
+        }
+      }
+      if (list = calls['all']) {
+        for (i = 0, l = list.length; i < l; i++) {
+          list[i].apply(this, arguments);
         }
       }
       return this;
@@ -172,7 +178,7 @@
       if (this.validate) {
         var error = this.validate(attrs);
         if (error) {
-          this.trigger('error', error);
+          this.trigger('error', this, error);
           return false;
         }
       }
@@ -188,7 +194,7 @@
           now[attr] = val;
           if (!options.silent) {
             this._changed = true;
-            this.trigger('change:' + attr);
+            this.trigger('change:' + attr, this);
           }
         }
       }
@@ -206,7 +212,7 @@
       delete this._attributes[attr];
       if (!options.silent) {
         this._changed = true;
-        this.trigger('change:' + attr);
+        this.trigger('change:' + attr, this);
         this.change();
       }
       return value;
@@ -296,7 +302,7 @@
       this.comparator = options.comparator;
       delete options.comparator;
     }
-    this._boundOnModelChange = _.bind(this._onModelChange, this);
+    this._boundOnModelEvent = _.bind(this._onModelEvent, this);
     this._initialize();
     if (models) this.refresh(models,true);
   };
@@ -359,7 +365,7 @@
       model.collection = this;
       var index = this.comparator ? this.sortedIndex(model, this.comparator) : this.length;
       this.models.splice(index, 0, model);
-      model.bind('change', this._boundOnModelChange);
+      model.bind('all', this._boundOnModelEvent);
       this.length++;
       if (!options.silent) this.trigger('add', model);
       return model;
@@ -382,7 +388,7 @@
       delete this._byCid[model.cid];
       delete model.collection;
       this.models.splice(this.indexOf(model), 1);
-      model.unbind('change', this._boundOnModelChange);
+      model.unbind('all', this._boundOnModelEvent);
       this.length--;
       if (!options.silent) this.trigger('remove', model);
       return model;
@@ -394,7 +400,7 @@
       options || (options = {});
       if (!this.comparator) throw new Error('Cannot sort a set without a comparator');
       this.models = this.sortBy(this.comparator);
-      if (!options.silent) this.trigger('refresh');
+      if (!options.silent) this.trigger('refresh', this);
       return this;
     },
 
@@ -412,7 +418,7 @@
       }
       this._initialize();
       this.add(models, {silent: true});
-      if (!options.silent) this.trigger('refresh');
+      if (!options.silent) this.trigger('refresh', this);
       return this;
     },
 
@@ -453,12 +459,18 @@
 
     // Internal method called every time a model in the set fires an event.
     // Sets need to update their indexes when models change ids.
-    _onModelChange : function(model) {
-      if (model.hasChanged('id')) {
-        delete this._byId[model.formerValue('id')];
-        this._byId[model.id] = model;
+    _onModelEvent : function(ev, model, error) {
+      switch (ev) {
+        case 'change':
+          if (model.hasChanged('id')) {
+            delete this._byId[model.formerValue('id')];
+            this._byId[model.id] = model;
+          }
+          this.trigger('change', model);
+          break;
+        case 'error':
+          this.trigger('error', model, error);
       }
-      this.trigger('change', model);
     }
 
   });
@@ -537,7 +549,7 @@
     // of *[mode]_[group]* on the view's element. Convenient way to swap styles
     // and behavior.
     setMode : function(mode, group) {
-      if (this.modes[group] == mode) return;
+      if (this.modes[group] === mode) return;
       $(this.el).setMode(mode, group);
       this.modes[group] = mode;
     },

-- 
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