Skip to content

Instantly share code, notes, and snippets.

@cowboy
Created February 10, 2010 13:33
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 cowboy/24068222cebfb58298ee to your computer and use it in GitHub Desktop.
Save cowboy/24068222cebfb58298ee to your computer and use it in GitHub Desktop.
// Tested in the latest 1.4.2pre (Mon Feb 8 23:28:15 2010 -0500)
// Note:
// * in 1.3.2, .unbind( 'foo' ) didn't unbind the .a handler (was this a bug?)
// * in 1.4.2pre, teardown is not ocurring!!!
// === WHEN THIS CODE IS RUN ===
$.event.special.foo = {
setup: function() { console.log( 'setup', this.tagName, [].slice.call( arguments ) ); },
teardown: function() { console.log( 'teardown', this.tagName, [].slice.call( arguments ) ); },
add: function() { console.log( 'add', this.tagName, [].slice.call( arguments ) ); },
remove: function() { console.log( 'remove', this.tagName, [].slice.call( arguments ) ); }
};
var o, elem = $('body');
elem.bind( 'foo', function x(){ o.push('x'); } );
elem.bind( 'foo.a', function a(){ o.push('a'); } );
elem.bind( 'foo.b', function b(){ o.push('b'); } );
elem.bind( 'foo.c', function c(){ o.push('c'); } );
elem.bind( 'foo.b.c', function bc(){ o.push('bc'); } );
elem.bind( 'foo.c.d', function cd(){ o.push('cd'); } );
elem.bind( 'foo.d.e', function de(){ o.push('de'); } );
o = []; elem.trigger('foo'); console.log( o );
elem.unbind( 'foo.b' );
o = []; elem.trigger('foo'); console.log( o );
elem.unbind( 'foo.c' );
o = []; elem.trigger('foo'); console.log( o );
elem.unbind( 'foo.e.d' );
o = []; elem.trigger('foo'); console.log( o );
elem.unbind( 'foo' );
o = []; elem.trigger('foo'); console.log( o );
elem.unbind( 'foo.a' );
o = []; elem.trigger('foo'); console.log( o );
// === THIS IS THE OUTPUT ===
// 1.3.2
setup BODY [undefined, []]
["x", "a", "b", "c", "bc", "cd", "de"]
["x", "a", "c", "cd", "de"]
["x", "a", "de"]
["x", "a"]
["a"]
teardown BODY [["a" 0=a]]
[]
// 1.4.1
setup BODY [undefined, [], x()]
add BODY [x(), undefined, [], { }]
add BODY [a(), undefined, ["a" 0=a], { }]
add BODY [b(), undefined, ["b" 0=b], { }]
add BODY [c(), undefined, ["c" 0=c], { }]
add BODY [bc(), undefined, ["b", "c" 0=b 1=c], { }]
add BODY [cd(), undefined, ["c", "d" 0=c 1=d], { }]
add BODY [de(), undefined, ["d", "e" 0=d 1=e], { }]
["x", "a", "b", "c", "bc", "cd", "de"]
remove BODY [["b" 0=b], undefined]
["x", "a", "c", "cd", "de"]
remove BODY [["c" 0=c], undefined]
["x", "a", "de"]
remove BODY [["e", "d" 0=e 1=d], undefined]
["x", "a"]
remove BODY [[], undefined]
teardown BODY [[]]
[]
[]
// 1.4.2pre
setup BODY [undefined, [], function()]
add BODY [{ type=foo guid=4 }]
add BODY [{ namespace=a type=foo guid=5 }]
add BODY [{ namespace=b type=foo guid=6 }]
add BODY [{ namespace=c type=foo guid=7 }]
add BODY [{ namespace=b.c type=foo guid=8 }]
add BODY [{ namespace=c.d type=foo guid=9 }]
add BODY [{ namespace=d.e type=foo guid=10 }]
["x", "a", "b", "c", "bc", "cd", "de"]
remove BODY [{ namespace=b type=foo guid=6 }]
remove BODY [{ namespace=b.c type=foo guid=8 }]
["x", "a", "c", "cd", "de"]
remove BODY [{ namespace=c type=foo guid=7 }]
remove BODY [{ namespace=c.d type=foo guid=9 }]
["x", "a", "de"]
remove BODY [{ namespace=d.e type=foo guid=10 }]
["x", "a"]
remove BODY [{ type=foo guid=4 }]
remove BODY [{ namespace=a type=foo guid=5 }]
[]
[]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment