Skip to content

Loading…

Removing context from listenTo/stoplistening #2019

Merged
merged 1 commit into from

3 participants

@tgriesser
Collaborator

Per discussion in #2015 - a custom mediator object to manage the contexts provided to on/off would be better suited than the complications added by the fourth argument to listenTo and stopListening.

@jashkenas jashkenas merged commit d63fe9e into jashkenas:master

1 check passed

Details default The Travis build passed
@tgriesser tgriesser deleted the tgriesser:nocontext branch
@recurse recurse referenced this pull request in marionettejs/backbone.marionette
Closed

Update marionette.view.md #637

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Dec 24, 2012
  1. @tgriesser
Showing with 8 additions and 34 deletions.
  1. +5 −7 backbone.js
  2. +3 −3 index.html
  3. +0 −24 test/events.js
View
12 backbone.js
@@ -190,27 +190,25 @@
// An inversion-of-control version of `on`. Tell *this* object to listen to
// an event in another object ... keeping track of what it's listening to.
- listenTo: function(object, events, callback, context) {
- context = context || this;
+ listenTo: function(object, events, callback) {
var listeners = this._listeners || (this._listeners = {});
var id = object._listenerId || (object._listenerId = _.uniqueId('l'));
listeners[id] = object;
- object.on(events, callback || context, context);
+ object.on(events, callback || this, this);
return this;
},
// Tell this object to stop listening to either specific events ... or
// to every object it's currently listening to.
- stopListening: function(object, events, callback, context) {
- context = context || this;
+ stopListening: function(object, events, callback) {
var listeners = this._listeners;
if (!listeners) return;
if (object) {
- object.off(events, callback, context);
+ object.off(events, callback, this);
if (!events && !callback) delete listeners[object._listenerId];
} else {
for (var id in listeners) {
- listeners[id].off(null, null, context);
+ listeners[id].off(null, null, this);
}
this._listeners = {};
}
View
6 index.html
@@ -773,10 +773,10 @@ <h2 id="Events">Backbone.Events</h2>
</p>
<p id="Events-listenTo">
- <b class="header">listenTo</b><code>object.listenTo(other, event, callback, [context])</code>
+ <b class="header">listenTo</b><code>object.listenTo(other, event, callback)</code>
<br />
Tell an <b>object</b> to listen to a particular event on an <b>other</b> object.
- The advantage of using this form, instead of <tt>other.on(event, callback, [context])</tt>,
+ The advantage of using this form, instead of <tt>other.on(event, callback)</tt>,
is that <b>listenTo</b> allows the <b>object</b> to keep track of the events,
and they can be removed all at once later on.
</p>
@@ -786,7 +786,7 @@ <h2 id="Events">Backbone.Events</h2>
</pre>
<p id="Events-stopListening">
- <b class="header">stopListening</b><code>object.stopListening([other], [event], [callback], [context])</code>
+ <b class="header">stopListening</b><code>object.stopListening([other], [event], [callback])</code>
<br />
Tell an <b>object</b> to stop listening to events. Either call
<b>stopListening</b> with no arguments to have the <b>object</b> remove
View
24 test/events.js
@@ -86,30 +86,6 @@ $(document).ready(function() {
b.trigger('change');
});
- test("listenTo with context", 1, function() {
- var a = _.extend({}, Backbone.Events);
- var ctx = {};
- a.listenTo(a, 'foo', function(){ equal(this, ctx); }, ctx);
- a.trigger('foo');
- });
-
- test("stopListening with context", 2, function() {
- var a = _.extend({}, Backbone.Events);
- var ctx = {};
- var calledWithContext = false;
- var calledWithoutContext = false;
-
- a.listenTo(a, 'foo', function(){ calledWithContext = true; }, ctx);
- a.listenTo(a, 'foo', function(){ calledWithoutContext = true; });
-
- a.stopListening(a, 'foo', null, ctx);
-
- a.trigger('foo');
-
- equal(false, calledWithContext);
- equal(true, calledWithoutContext);
- });
-
test("trigger all for each event", 3, function() {
var a, b, obj = { counter: 0 };
_.extend(obj, Backbone.Events);
Something went wrong with that request. Please try again.