I found a class in the Google Closure Library that does a similar thing: goog.events.FileDropHandler
.
It both listens for and fires events. The relevant parts of the source code:
/**
* @constructor
* @extends {goog.events.EventTarget}
*/
goog.events.FileDropHandler = function(element, opt_preventDropOutside) {
goog.events.EventTarget.call(this);
this.eventHandler_ = new goog.events.EventHandler(this);
};
goog.inherits(goog.events.FileDropHandler, goog.events.EventTarget);
goog.events.FileDropHandler.prototype.disposeInternal = function() {
goog.events.FileDropHandler.superClass_.disposeInternal.call(this);
this.eventHandler_.dispose();
};
Thus, it extends goog.events.EventTarget
, but the handler is a different object. This seems to follow a pattern in other classes in the Closure Library as well.
I think I would prefer using registerDisposable
from the goog.Disposable
superclass instead of overriding disposeInternal
, but the idea is the same.
/**
* @constructor
* @extends {goog.events.EventTarget}
*/
var MyViewClass = function() {
goog.events.EventTarget.call(this);
this.handler = new goog.events.EventHandler();
this.registerDisposable(this.handler);
};
goog.inherits(MyViewClass, goog.events.EventTarget);