An Event Manager
Sep. 15th, 2013 02:44 pmjQuery does a great job of providing a normalized event model across all browsers. It’s my go-to library for that particular task, plus it has several other useful features. One of the great features jQuery has for its event system is namespacing. You can namespace your event types as you attach, detach, and call them. For example:
Now, when you click on the target element, both event handlers will fire. If you manually trigger a click event you can add the namespace to it:
This will trigger only the
Event namespacing is a great feature, and I decided to think about how I might implement it from scratch, just as an exercise. The reason jQuery has namespaced events is because it has its own event handling system, so I started to think about what it would take to write a simple event manager that would provide a namespacing feature.
So here’s a first stab at a general event manager. The goal here isn’t to produce production-quality code, but rather to explore the desired features and get some code up that implements them, and if we like the direction we can later create something that’s more structured.
( Long post is best post! Click to continue... )
// Attach a simple event handler to the element $(“#targetEl”).on(“click”, function(event) { console.log(‘A click event happened!’); }); // Now attach a namespaced event handler to the element $(‘#targetEl’).on(‘click.plugin’, function(event) { console.log(‘A click.plugin event happened!’); });
Now, when you click on the target element, both event handlers will fire. If you manually trigger a click event you can add the namespace to it:
$(‘#targetEl’).trigger(‘click.plugin’);
This will trigger only the
click.plugin
event handler. This gives you an easy way of segregating your event handlers, and is particularly useful with custom events.Event namespacing is a great feature, and I decided to think about how I might implement it from scratch, just as an exercise. The reason jQuery has namespaced events is because it has its own event handling system, so I started to think about what it would take to write a simple event manager that would provide a namespacing feature.
So here’s a first stab at a general event manager. The goal here isn’t to produce production-quality code, but rather to explore the desired features and get some code up that implements them, and if we like the direction we can later create something that’s more structured.
( Long post is best post! Click to continue... )