W3C home > Mailing lists > Public > www-dom@w3.org > January to March 2013

RE: Better event listeners

From: Domenic Denicola <domenic@domenicdenicola.com>
Date: Wed, 9 Jan 2013 02:27:50 +0000
To: Brandon Wallace <brandon.wallace@yahoo.com>, Jake Verbaten <raynos2@gmail.com>, Glenn Maynard <glenn@zewt.org>
CC: Anne van Kesteren <annevk@annevk.nl>, "www-dom@w3.org" <www-dom@w3.org>
Message-ID: <B4AE8F4E86E26C47AC407D49872F6F9F5694BED3@BY2PRD0510MB354.namprd05.prod.outlook.com>
What about just... "off"?

> -----Original Message-----
> From: Brandon Wallace [mailto:brandon.wallace@yahoo.com]
> Sent: Tuesday, January 8, 2013 21:20
> To: Jake Verbaten; Glenn Maynard
> Cc: Anne van Kesteren; www-dom@w3.org
> Subject: Re: Better event listeners
> 
> An object with a "dispose" is a common choice.  knockoutjs & Reactive
> Extensions both use it to unsubscribe.  The name is not terribly verbose and
> has a general enough meaning that it can be applied to many different
> concepts, including stop listening to an event listener.
> 
> If you choose a method name that is "common" with other patterns in use,
> then it allows for easier interoperability.  For example, if you indeed chose to
> return a "Disposable", then developers can leverage existing libraries to help
> manage their event listeners.  Here's a simplistic example that makes use of
> Rx.CompositeDisposable* to manage subscriptions to some knockout
> observables, rx observables, and event handlers:
> 
> var allMySubscriptions = new Rx.CompositeDisposable();
> allMySubscriptions.add(someKnockoutObservable.subscribe(function (value)
> { ... })); allMySubscriptions.add(someRxObservable.subscribe(function (value)
> { ... }, function (error) { ... }, function () { ... }));
> allMySubscriptions.add(addEventListener("click", function (ev) { ... }));
> 
> ...elsewhere...
> allMySubscriptions.dispose(); // code making this call doesn't even need to
> know what is being disposed.
> 
> Works because all involved APIs return an object that has a "dispose" method
> to end the subscription.
> 
> * https://github.com/Reactive-

> Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js
> 
> Brandon
> 
> 
> 
> ________________________________
> From: Jake Verbaten <raynos2@gmail.com>
> To: Glenn Maynard <glenn@zewt.org>
> Cc: Anne van Kesteren <annevk@annevk.nl>; "www-dom@w3.org" <www-
> dom@w3.org>
> Sent: Tuesday, January 8, 2013 5:38 PM
> Subject: Re: Better event listeners
> 
> 
> using an object also allows for future scope creep. Returning a function makes
> the API simple and reduces complexity.
> 
> 
> However almost none of the existing host APIs are higher order functions (I
> can't think of a single API that returns a function) so it probably doesn't fit
> with the style.
> 
> However returning an object with a method stop is ambigious, returning an
> object with a method removeEventListener is verbose. I guess an object with a
> cancel method would make sense.
> 
> 
> 
> On Tue, Jan 8, 2013 at 3:32 PM, Glenn Maynard <glenn@zewt.org> wrote:
> 
> On Tue, Jan 8, 2013 at 5:23 AM, Anne van Kesteren <annevk@annevk.nl>
> wrote:
> >
> >On Mon, Jan 7, 2013 at 6:18 PM, Jake Verbaten <raynos2@gmail.com>
> wrote:
> >>> Emphasis being on that `.on(...)` returns some kind of token that
> >>> can be used to remove the listener so we don't have to keep a
> >>> reference to the listener ourself somewhere.
> >>
> >>I think that makes a lot of sense. I like the idea of just returning a
> >>function reference.
> >>
> >
> >Returning an object with a method is a more common pattern on the
> platform.  It also allows adding related features in the future without
> contortions (eg. Prototype's also has start(), to re-add the listener).
> >--
> >Glenn Maynard
> >
> >
> 

Received on Wednesday, 9 January 2013 02:28:24 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 9 January 2013 02:28:28 GMT