Solid.

On Thu, Dec 31, 2009 at 4:56 PM, Brandon Aaron <brandon.aa...@gmail.com>wrote:

> I'm on board with this.
>
> --
> Brandon Aaron
>
> On Thu, Dec 31, 2009 at 2:19 PM, John Resig <jere...@gmail.com> wrote:
> > I added in jQuery.proxy( obj, name ) support as well (I like this - I
> > also showed how to do it in Secrets of the JavaScript Ninja:
> >
> http://github.com/jquery/jquery/commit/1d2b1a57dae0b73b3d99197f73f4edb623b5574a
> >
> > Any major concerns before I push this through? Will this meet the
> > needs of everyone in the thread?
> >
> > --John
> >
> >
> >
> > On Thu, Dec 31, 2009 at 12:39 AM, John Resig <jere...@gmail.com> wrote:
> >> So I definitely agree that having a single, one-off, API addition (to
> >> bind and live) is kind of lame - especially when it conflicts with the
> >> jQuery way of defining the methods (having a non-callback argument
> >> being last).
> >>
> >> I sat down and wrote up a quick jQuery.bind() but found one critical
> >> issue that was not resolved by the hitch/bind/fn.prototype.bind
> >> technique: You can't (easily) unbind a function that has a different
> >> scope defined.
> >>
> >> For example:
> >>
> >> function foo(){}
> >> .bind( "click", foo.bind(someObject) );
> >> .unbind( "click", foo /* errr.... we actually need to save the fn
> >> somewhere */ );
> >>
> >> jQuery has already solved this problem internally using our
> >> jQuery.event.proxy method - and, in fact, if I were to land a
> >> jQuery.bind() it would end up using jQuery.event.proxy(). But if you
> >> look at jQuery.event.proxy() you can see that, in reality, we could
> >> just be using that method and skip this whole dance entirely. For
> >> example (and this works today, in jQuery 1.3.2):
> >>
> >> function foo(){}
> >> .bind( "click", jQuery.event.proxy( foo, someObject ) );
> >> .unbind( "click", foo );
> >>
> >> Save for the sugar that hitch provides I can't see any reason to not
> >> just promote jQuery.event.proxy() to jQuery.proxy() and make it an
> >> officially supported part of the jQuery API.
> >>
> >> Filed: http://dev.jquery.com/ticket/5736
> >> Landed (in a branch, for review and further discussion):
> >>
> http://github.com/jquery/jquery/commit/66975de2d249643779e2b3daad0457f7f5f92508
> >>
> >> --John
> >>
> >> For fun, here is the jQuery.bind() that I quickly wrote (that DOESN'T
> >> use jQuery.proxy):
> >>
> >> diff --git a/src/core.js b/src/core.js
> >> index 944e8a9..1908123 100644
> >> --- a/src/core.js
> >> +++ b/src/core.js
> >> @@ -614,6 +614,20 @@ jQuery.extend({
> >>                return ret.concat.apply( [], ret );
> >>        },
> >>
> >> +       bind: function( scope, fn ) {
> >> +               if ( scope ) {
> >> +                       if ( typeof fn === "string" ) {
> >> +                               fn = scope[ fn ];
> >> +                       }
> >> +
> >> +                       if ( fn ) {
> >> +                               return function() {
> >> +                                       return fn.apply( scope,
> arguments );
> >> +                               };
> >> +                       }
> >> +               }
> >> +       },
> >> +
> >>        // Use of jQuery.browser is frowned upon.
> >>        // More details: http://docs.jquery.com/Utilities/jQuery.browser
> >>        browser: {
> >>
> >>
> >>
> >>
> >> On Tue, Dec 29, 2009 at 4:58 PM, Rick Waldron <waldron.r...@gmail.com>
> wrote:
> >>> This is exactly what I was getting at... With regard to event handler
> >>> .bind() and fn.bind()
> >>>
> >>> So far with my $.hitch tests, the one thing I dislike is the argument
> >>> structure. It does what it should but I'd much prefer
> >>> a function.prototype.bind() if given the choice.
> >>>
> >>>
> >>>
> >>> -- Sent from my Palm Prē
> >>> ________________________________
> >>> ajpiano wrote:
> >>>
> >>> I love the idea of extending scope manipulation to any function,
> >>> rather than only event handlers. Callbacks to ajax requests often
> >>> need a better scope than the XHR, and while I look forward to 1.4's
> >>> functionality for event handlers, it would really be a shame to
> >>> continue to force people to use non-jQuery solutions for full scope
> >>> manipulation.
> >>>
> >>> That said, and while I do love (and frequently recommend) $.hitch, I
> >>> prefer an approach more like Prototype or Underscore's that doesn't
> >>> involve passing so many strings.
> >>>
> >>> --adam
> >>>
> >>> On Dec 29, 3:45 pm, Peter Higgins <phigg...@gmail.com> wrote:
> >>>> It is a short-port of Dojo's dojo.hitch(). The only thing it doesn't
> do
> >>>> that Dojo's does is currying the arguments in the original hitched
> >>>> function, eg:
> >>>>
> >>>> // a bad example off the top of my head
> >>>> var x = $(".nodes");
> >>>> var clicker = $.hitch(x, "bind", "click");
> >>>>
> >>>> clicker(function(e){
> >>>>     // this just called $(.nodes").bind("click", arguments[0])
> >>>>
> >>>> });
> >>>>
> >>>> It would be another few bytes to support that. dojo.partial is equally
> >>>> as neat.
> >>>>
> >>>> Regards,
> >>>> Peter
> >>>>
> >>>>
> >>>>
> >>>> Rick Waldron wrote:
> >>>> > $.hitch() is a great "fn.bind()" solution, I still want to try a
> >>>> > variety of scope related tests, but so far its really solid. I love
> >>>> > the fact that you included the exception for a non existent  method,
> I
> >>>> > referred to Prototype's latest and there is no such check.
> >>>>
> >>>> > Hats off.
> >>>>
> >>>> > Rick
> >>>>
> >>>> > On Tue, Dec 29, 2009 at 12:40 PM, Rick Waldron <
> waldron.r...@gmail.com
> >>>> > <mailto:waldron.r...@gmail.com>> wrote:
> >>>>
> >>>> >     Agreed, that is slick. As soon as I get back to the office I'm
> >>>> >     going to test it, I look forward to this.
> >>>>
> >>>> >     -- Sent from my Palm Prē
> >>>>
> >>>> >
> >>>> >
> ------------------------------------------------------------------------
> >>>> >     aHeckman wrote:
> >>>>
> >>>> >     Yeah this looks good Peter. This should be in core IMHO.
> >>>>
> >>>> >     BTW, you're running for president? LOL
> >>>>
> >>>> >     On Dec 29, 9:24 am, Peter Higgins <phigg...@gmail.com
> >>>> >     <mailto:phigg...@gmail.com>> wrote:
> >>>> >     > ... this is why I keep suggesting making the bind
> functionality as
> >>>> >     > explicit function call, rather than hidden away in one or two
> >>>> > api's:
> >>>>
> >>>> >     >http://higginsforpresident.net/js/static/jq.hitch.js
> >>>>
> >>>> >     > It does not extend any native prototypes, is useful and a bit
> >>>> > magic
> >>>> >     > (with the string->method resolution).
> >>>>
> >>>> >     > Regards,
> >>>> >     > Peter
> >>>>
> >>>> >     > aHeckman wrote:
> >>>> >     > > I too feel relying on a function.prototype.bind
> implementation
> >>>> >     would
> >>>> >     > > be the most forward looking but I'm not sure that jives with
> the
> >>>> >     > > general approach of jQuery:
> >>>>
> >>>> >     > > jQuery doesn't extend Native.prototype.anything.
> >>>>
> >>>> >     > > On Dec 29, 1:12 am, Daniel Friesen <
> nadir.seen.f...@gmail.com
> >>>> >     <mailto:nadir.seen.f...@gmail.com>> wrote:
> >>>>
> >>>> >     > >> Rick Waldron wrote:
> >>>>
> >>>> >     > >>> Available, as in the "scope" argument is being retrofitted
> to
> >>>> > an
> >>>> >     > >>> existing function, and ONLY to that function.
> >>>>
> >>>> >     > >>>     I don't get what you are talking about a fn.bind()
> >>>> >     implementation in
> >>>> >     > >>>     jQuery, or what you mean by available in just one
> >>>> >     function though.
> >>>>
> >>>> >     > >>> Read ES5.
> >>>>
> >>>> >     > >>> function.prototype.bind()
> >>>>
> >>>> >     > >> I already read ES5, I use portions of ES5 in a number of js
> >>>> >     server-based
> >>>> >     > >> projects already.
> >>>>
> >>>> >     > >> However I don't get "ONLY" one function, since the whole
> point
> >>>> > of
> >>>> >     > >> .bind() is to bind a `this` onto ONE function with one
> call.
> >>>> >     It's not
> >>>> >     > >> bind otherwise.
> >>>>
> >>>> >     > >> So I don't see any limitation. Unless you are under the
> >>>> >     > >> misinterpretation that after you have called .bind() on one
> >>>> >     function you
> >>>> >     > >> have modified that function and bound it's `this`. .bind()
> >>>> >     doesn't
> >>>> >     > >> modify the function, it returns a new one.
> >>>> >     > >>  From ES5 15.3.4.5 Function.prototype.bind> The bind method
> >>>> >     takes one or more arguments, thisArg and (optionally)
> >>>>
> >>>> >     > >>> arg1, arg2, etc, and returns a *new*
> >>>> >     > >>> function object by performing the following steps:
> >>>>
> >>>> >     > >> So this is valid ES5 code.
> >>>>
> >>>> >     > >> "use strict";
> >>>> >     > >> var a = function() { alert(this); };
> >>>> >     > >> var a1 = a.bind("a");
> >>>> >     > >> var a2 = a.bind("b");
> >>>>
> >>>> >     > >> a(); // Alerts undefined
> >>>> >     > >> a1(); // Alerts "a"
> >>>> >     > >> a2(); // Alerts "b"
> >>>>
> >>>> >     > >>> On Mon, Dec 28, 2009 at 7:43 PM, Daniel Friesen
> >>>> >     > >>> <nadir.seen.f...@gmail.com <mailto:
> nadir.seen.f...@gmail.com>
> >>>> >     <mailto:nadir.seen.f...@gmail.com
> >>>> >     <mailto:nadir.seen.f...@gmail.com>>> wrote:
> >>>>
> >>>> >     > >>>     I made a post about how confusing people may find the
> >>>> >     name bind some
> >>>> >     > >>>     time ago. Suggested renaming bind to something like
> >>>> >     event, and keeping
> >>>> >     > >>>     bind as an alias of course. That was rejected.
> >>>>
> >>>> >     > >>>     I don't get what you are talking about a fn.bind()
> >>>> >     implementation in
> >>>> >     > >>>     jQuery, or what you mean by available in just one
> >>>> >     function though.
> >>>>
> >>>> >     > >>>     ~Daniel Friesen (Dantman, Nadir-Seen-Fire)
> >>>> >     > >>>     [http://daniel.friesen.name]
> >>>>
> >>>> >     > >>>     Rick Waldron wrote:
> >>>> >     > >>>     > John,
> >>>>
> >>>> >     > >>>     > While I'm glad to see a scope arg available, i still
> >>>> >     think this is
> >>>> >     > >>>     > negligent to the future of jQuery and ES standards.
> I
> >>>> >     really think a
> >>>> >     > >>>     > fn.bind() implementation would ideal (since it would
> be
> >>>> >     jQuery-wide
> >>>> >     > >>>     > and not just available in one function), but as I've
> >>>> >     noted in
> >>>> >     > >>>     the past
> >>>> >     > >>>     > and is exampled here, beginners may find this syntax
> a
> >>>> >     bit boggling:
> >>>>
> >>>> >     > >>>     > $(foo).bind('event', fn.bind(bar) );
> >>>>
> >>>> >     > >>>     > Rick
> >>>>
> >>>> >     > >> ~Daniel Friesen (Dantman, Nadir-Seen-Fire)
> >>>> >     [http://daniel.friesen.name]
> >>>>
> >>>> >     > > --
> >>>>
> >>>> >     > > 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 <mailto:jquery-dev@googlegroups.com
> >.
> >>>> >     > > To unsubscribe from this group, send email to
> >>>> >     
> >>>> > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> >>>> >     
> >>>> > <mailto:jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com>
> >.
> >>>> >     > > For more options, visit this group
> >>>> >     athttp://groups.google.com/group/jquery-dev?hl=en
> >>>> >     <http://groups.google.com/group/jquery-dev?hl=en>.
> >>>>
> >>>> >     --
> >>>>
> >>>> >     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
> >>>> >     <mailto:jquery-dev@googlegroups.com>.
> >>>> >     To unsubscribe from this group, send email to
> >>>> >     
> >>>> > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> >>>> >     
> >>>> > <mailto:jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com>
> >.
> >>>> >     For more options, visit this group at
> >>>> >    http://groups.google.com/group/jquery-dev?hl=en.
> >>>>
> >>>> > --
> >>>>
> >>>> > You received this message because you are subscribed to the Google
> >>>> > Groups "jQuery Development" group.
> >>>> > To post to this group, send email to jquery-...@googlegroups.com.
> >>>> > To unsubscribe from this group, send email to
> >>>> > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> .
> >>>> > For more options, visit this group at
> >>>> >http://groups.google.com/group/jquery-dev?hl=en.
> >>>
> >>> --
> >>>
> >>> You received this message because you are subscribed to the Google
> Groups
> >>> "jQuery Development" group.
> >>> To post to this group, send email to jquery-...@googlegroups.com.
> >>> To unsubscribe from this group, send email to
> >>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> .
> >>> For more options, visit this group at
> >>> http://groups.google.com/group/jquery-dev?hl=en.
> >>>
> >>>
> >>> --
> >>>
> >>> You received this message because you are subscribed to the Google
> Groups
> >>> "jQuery Development" group.
> >>> To post to this group, send email to jquery-...@googlegroups.com.
> >>> To unsubscribe from this group, send email to
> >>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> .
> >>> For more options, visit this group at
> >>> http://groups.google.com/group/jquery-dev?hl=en.
> >>>
> >>
> >
> > --
> >
> > You received this message because you are subscribed to the Google Groups
> "jQuery Development" group.
> > To post to this group, send email to jquery-...@googlegroups.com.
> > To unsubscribe from this group, send email to
> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> .
> > For more options, visit this group at
> http://groups.google.com/group/jquery-dev?hl=en.
> >
> >
> >
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "jQuery Development" group.
> To post to this group, send email to jquery-...@googlegroups.com.
> To unsubscribe from this group, send email to
> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/jquery-dev?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@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