Hi Rick,

I don't understand how this is problematic. jQuery's bind() is a  
method of jQuery.prototype, not Function.prototype. And it's not like  
jQuery has never had method names that are the same as native  
JavaScript method names; slice() comes to mind.

Maybe you're concerned about potential confusion?

--Karl

____________
Karl Swedberg
www.englishrules.com
www.learningjquery.com




On Sep 5, 2009, at 12:14 PM, Rick Waldron wrote:

> I hate to be the one that brings this up, but I feel it should be  
> mentioned: Regardless of what your write here, bind() is problematic  
> in the long run:
>
> http://www.ecma-international.org/publications/files/drafts/tc39-2009-025.pdf
>
> Jump to the pdf page 128 (the actual document page # is 114)
>
>
> I've recently been working on an elegant feature detection/argument  
> type conditional patch for this issue. Ideally the solution i'm  
> working towards is one that will allow jQuery's current bind()  
> unbind() to work as it does, but also allow the correct  
> Function.prototype.bind() usage
>
> Rick
>
>
>
>
>
>
>
>
>
> On Sat, Sep 5, 2009 at 4:36 AM, Oleg Slobodskoi <oleg...@googlemail.com 
> > wrote:
>
> Your way is not shorter as this one, and such case, were you need to
> bind a lot of different events with different handler to the same
> element, is not very often. In the most cases you want to bind
> different events to different elements. If you are binding to the same
> element a lot of events you can also do all your actions in one
> handler by checking the e.type.
>
> $("#myID").click( function(e) {
>    // handle click
> })
> . mouseover( function(e) {
>    // handle mouseover
> })
> . mouseout : function(e) {
>    // handle mouseout
> });
>
> On Sep 3, 10:37 pm, KeeganWatkins <keeganwatk...@gmail.com> wrote:
> > First, this conversation started on the learningjquery.com blog
> > (http://www.learningjquery.com/2009/06/shorthand-methods-for- 
> unbind).
> >
> > Ideally, I'd like to see the bind and unbind methods accept an  
> object
> > of eventType/handler pairs, such that a single wrapped set could  
> take
> > a hash of bindings in a single call. Something along these lines:
> >
> > (function($) {
> >
> > // Keep a copy of the old methods
> > $.fn._bind = $.fn.bind;
> > $.fn._unbind = $.fn.unbind;
> >
> > // Redefine $().bind()
> > $.fn.bind = function( type, data, fn ) {
> >         // If only a map of handlers was passed...
> >         return (arguments.length === 1) ?
> >
> >         this.each(function(key, node) {
> >                 // Iterate over the map...
> >                 $.each(type, function(event, handler) {
> >                         event == "unload" ?
> >                                 // ... using $.fn.one() for  
> "unload" events...
> >                                 $(this).one(event, handler) :
> >                                 // ... and $.event.add() for others
> >                                 jQuery.event.add( this, event,  
> handler );
> >                 });
> >         }) :
> >
> >         // Otherwise, use the existing implementation as of 1.3.2,
> >         // with slight syntactic modifications
> >         this.each(function(key, node) {
> >                 type == "unload" ?
> >                         // Use $.fn.one() for "unload" events...
> >                         $(this).one(type, fn) :
> >                         // ... and $.event.add() for others
> >                         jQuery.event.add( this, type, fn || data,  
> fn && data );
> >         });
> >
> > };
> >
> > // Redefine $().unbind()
> > $.fn.unbind = function(type, fn) {
> >         // If only a map of handlers was passed...
> >         return (arguments.length === 1)
> >
> >         this.each(function(){
> >                 // Iterate over the map...
> >                 $.each(type, function(event, handler) {
> >                         // ... and unbind each using event.remove()
> >                         jQuery.event.remove( this, event, handler );
> >                 });
> >         }) :
> >
> >         // Otherwise, use the existing implementation as of 1.3.2,
> >         // copied verbatim
> >         this.each(function(){
> >                 jQuery.event.remove( this, type, fn );
> >         });
> >
> > };
> > })(jQuery);
> >
> > Usage would be as follows:
> > $("#myID").bind({
> >         click : function(e) {
> >                 // handle click
> >         },
> >         mouseover : function(e) {
> >                 // handle mouseover
> >         },
> >         mouseout : function(e) {
> >                 // handle mouseout
> >         }
> >
> > });
> >
> > Or, with named functions (ideal for later use of $().unbind()):
> > $("#myID").bind({
> >         click : clickHandler,
> >         mouseover : mouseoverHandler,
> >         mouseout : mouseoutHandler
> >
> > });
> >
> > function clickHandler(e) {
> >         // handle click
> >
> > }
> >
> > function mouseoverHandler(e) {
> >         // handle mouseover
> >
> > }
> >
> > function mouseoutHandler(e) {
> >         // handle mouseout
> >
> > }
> >
> > With named function references, unbinding multiple events would be
> > simple:
> > $("#myID").unbind({
> >         click : clickHandler,
> >         mouseover : mouseoverHandler,
> >         mouseout : mouseoutHandler
> >
> > });
> >
> > I realize there are some potential issues, such as the ability to  
> pass
> > custom data to $().bind() is lost when an object of event/handler
> > pairs is passed. I personally don't usually use it anyhow, and  
> binding
> > events individually will still support custom data (as the
> > implementation is the same).
>
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to