Skip to content

Instantly share code, notes, and snippets.

@oroce
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oroce/9598486 to your computer and use it in GitHub Desktop.
Save oroce/9598486 to your computer and use it in GitHub Desktop.
event delegation in backbone
var Backbone = require('backbone');
var _ = require('underscore');
// original: https://github.com/jashkenas/backbone/blob/master/backbone.js#L1037
var delegateEventSplitter = /^(\S+)\s*(.*)$/;
var BaseView = Backbone.View.extend({
// original: https://github.com/jashkenas/backbone/blob/master/backbone.js#L1112
delegateEvents: function(events){
if (!(events || (events = _.result(this, 'events')))) return this;
this.undelegateEvents();
for (var key in events) {
var method = events[key];
if (!_.isFunction(method)) method = this[events[key]];
if (!method) continue;
var match = key.match(delegateEventSplitter);
if( match[1] === "such-custom-event" ){
this.delegate("dragstart", match[2], _.bind(method, this));
this.delegate("touchstart", match[2], _.bind(method, this));
this.delegate("MSPointerDown", match[2], _.bind(method, this));
}
else{
this.delegate(match[1], match[2], _.bind(method, this));
}
}
return this;
}
})
module.exports = BaseView;
var BaseView = require("./base");
var MyView = BaseView.extend({
events: {
"such-custom-event .doge": "wowSuchMethod"
},
wowSuchMethod: function(){
return "so-return";
}
});
new MyView();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment