Bug Tracker

Ticket #2286 (new enhancement)

Opened 10 months ago

Add ability to use "Category" namespacing on events

Reported by: cthatcher Assigned to: anonymous
Type: enhancement Priority: minor
Milestone: 1.2.3 Component: event
Version: 1.2.2 Keywords: event namespace
Cc: Needs: Review

Description

the milestone / version are actually 1.2.4 / 1.2.3 respectively (the trac hasnt been updated yet as 1.2.3 ment out minutes ago).

This excerpt is taken from the dev list thread "[jquery-dev] Re: $().unbind('.namespace') added", which was initally an announcement from Scott Gonzalez of the new feature to allow developers unbind events registered to namespaces.

I had mentioned this a little while ago and it might have slipped by or it might have been graciously left alone because it's not a good idea, but internally I usually have two namespaces so each module has something like Outer.Inner.Class
and I generally use the namespace, class and event to bind, so:
jQuery.bind("myevent.Outer", function(){...});
or
jQuery.bind("myevent.Outer.Inner", function(){...});
or
jQuery.bind("myevent.Outer.Inner.Class", function(){...});
Right now jQuery.event has
64	                // Namespaced event handlers
65	                var parts = type.split(".");
66	                type = parts[0];
67	                handler.type = parts[1];
which means, in my case only Outer is ever included in the namespace registering. Then it's unbind all, or unbind nothing for the namespaced events. If instead it were:
64	                // Namespaced event handlers
65	                var parts = type.split(".");
66	                type = parts.shift();
67	                handler.type = parts.join(".");
I'd be able to do:
jQuery.unbind(".Outer");
or
jQuery.unbind(".Outer.Inner");
or
jQuery.unbind(".Outer.Inner.Class")
which of course would require the remove was changed to:
                   // Namespaced event handlers
126	                    var parts = type.split(".");
127	                    type = parts.shift();
			    parts = parts.join(".");
128
129	                    if ( events[type] ) {
130	                        // remove the given handler for the given type
131	                        if ( handler )
132	                            delete events[type][handler.guid];
133
134	                        // remove all handlers for the given type
135	                        else
136	                            for ( handler in events[type] )
137	                                // Handle the removal of namespaced events
138	                                if ( !parts || events[type][handler].type == parts )
139	                                    delete events[type][handler];
I'd love to hear your thoughts, especially if it's a bad idea so I can understand why.
Thanks!
Chris Thatcher
christopher.thatcher@comcast.net

Attachments

Note: See TracTickets for help on using tickets.