Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Singleton wrapper around $.Callbacks to emulate Backbone events

View Events.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
var Events = {
 
// Store each registered $.Callbacks object by namespace
cache : {},
 
// Bind callback to event along with a context
bind : function( ev, callback, context, options ) {
// Make $.Callbacks default to having stopOnFalse
options = options || 'stopOnFalse';
// If this callback list does not exist, create it
if ( !this.cache[ ev ] ) {
this.cache[ ev ] = $.Callbacks( options );
}
// Add callback to cache, make sure callback gets proper context
this.cache[ ev ].add( $.proxy( callback, context ) );
}, // bind
 
unbind : function( ev, callback ) {
// Ignore unbind if it didn't exist
if ( !this.cache[ ev ] ) {
return;
}
this.cache.remove( callback );
}, // unbind
 
trigger : function( ev ) {
// Ignore trigger if it doesn't exist
if ( !this.cache[ ev ] ) {
return;
}
// Get dynamic number of arguments, knowing first argument is always event
var args = [].slice.call( arguments ),
pass = args.splice(1);
// Call $.Callbacks fire method with right arguments
this.cache[ ev ].fire.apply( null, pass );
} // trigger
 
}; // Events

Line #30: you missed the [ev]
Line #46: you could use fireWith( null, pass );

Owner

Thanks @jaubourg for that catch on #30. I didn't need unbind where I first wrote this so didn't see that bug yet. Also you're right about fireWith since fire just calls fireWith anyway. Didn't look at the internals until just now.

Here is my take on it. I have removed the options in bind given how situational it is (will work the first time, not the second, etc).

https://gist.github.com/1387553

Owner
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.