You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.0 KiB
JavaScript
87 lines
2.0 KiB
JavaScript
10 years ago
|
// Handlers
|
||
|
// --------
|
||
|
// A registry of functions to call, given a name
|
||
|
|
||
|
Wreqr.Handlers = (function(Backbone, _){
|
||
|
"use strict";
|
||
|
|
||
|
// Constructor
|
||
|
// -----------
|
||
|
|
||
|
var Handlers = function(options){
|
||
|
this.options = options;
|
||
|
this._wreqrHandlers = {};
|
||
|
|
||
|
if (_.isFunction(this.initialize)){
|
||
|
this.initialize(options);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Handlers.extend = Backbone.Model.extend;
|
||
|
|
||
|
// Instance Members
|
||
|
// ----------------
|
||
|
|
||
|
_.extend(Handlers.prototype, Backbone.Events, {
|
||
|
|
||
|
// Add multiple handlers using an object literal configuration
|
||
|
setHandlers: function(handlers){
|
||
|
_.each(handlers, function(handler, name){
|
||
|
var context = null;
|
||
|
|
||
|
if (_.isObject(handler) && !_.isFunction(handler)){
|
||
|
context = handler.context;
|
||
|
handler = handler.callback;
|
||
|
}
|
||
|
|
||
|
this.setHandler(name, handler, context);
|
||
|
}, this);
|
||
|
},
|
||
|
|
||
|
// Add a handler for the given name, with an
|
||
|
// optional context to run the handler within
|
||
|
setHandler: function(name, handler, context){
|
||
|
var config = {
|
||
|
callback: handler,
|
||
|
context: context
|
||
|
};
|
||
|
|
||
|
this._wreqrHandlers[name] = config;
|
||
|
|
||
|
this.trigger("handler:add", name, handler, context);
|
||
|
},
|
||
|
|
||
|
// Determine whether or not a handler is registered
|
||
|
hasHandler: function(name){
|
||
|
return !! this._wreqrHandlers[name];
|
||
|
},
|
||
|
|
||
|
// Get the currently registered handler for
|
||
|
// the specified name. Throws an exception if
|
||
|
// no handler is found.
|
||
|
getHandler: function(name){
|
||
|
var config = this._wreqrHandlers[name];
|
||
|
|
||
|
if (!config){
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
return function(){
|
||
|
return config.callback.apply(config.context, arguments);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
// Remove a handler for the specified name
|
||
|
removeHandler: function(name){
|
||
|
delete this._wreqrHandlers[name];
|
||
|
},
|
||
|
|
||
|
// Remove all handlers from this registry
|
||
|
removeAllHandlers: function(){
|
||
|
this._wreqrHandlers = {};
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return Handlers;
|
||
|
})(Backbone, _);
|