I'm not sure what all is involved/required for calling .unbind() to be
honest. Wouldn't it just be this._input.unbind('change') ?
or are there additional parameters required? If it needs a fn
reference, that's what hitch() returns ...

var cb = $.hitch(this, "_change");
this._input.bind('change', cb).ubind('change', cb);

Again, pardon my ignorance of the bind/unbind pattern.

Regards,
Peter

On Fri, Apr 10, 2009 at 5:52 AM, Azat Razetdinov <razetdi...@gmail.com> wrote:
>
>> this._input.bind('change', $.hitch(this, "_onInputChange"));
>
> How do you unbind the ‘hitched’ method?
>
> On Apr 8, 11:04 pm, pete higgins <phigg...@gmail.com> wrote:
>> My hitch() method does this kind of:
>>
>> http://higginsforpresident.net/js/jq.hitch.js
>>
>> It would look like:
>>
>> this._input.bind('change', $.hitch(this, "_onInputChange"));
>>
>> Regards,
>> Peter Higgins
>>
>>
>>
>> On Wed, Apr 8, 2009 at 12:03 PM, gregory <gregory.tomlin...@gmail.com> wrote:
>>
>> > the only difficulty I am having with
>> > Balazs Endresz's approach (which I have also
>> > implemented in my environment) is if another developer passes a
>> > function as 'data' param, the results become unpredictable. Though I
>> > don't *think* anybody should be passing a function to access as
>> > event.data, it currently does work to do so.
>>
>> > though changing the pattern to no longer have the handler as the last
>> > param may cause minor confusion, it should not cause any backward
>> > compatibility issues.
>>
>> > I have never bench marked the performance of 'return toString.call
>> > (obj) === "[object Function]";' Is this faster than running typeof obj
>> > === "function" ?
>>
>> > very, very interested in seeing the core of jquery improved to include
>> > a capability to apply correct scope to the handler function
>>
>> > thanks!
>> > -gregory
>>
>> > On Mar 29, 3:26 am, Azat Razetdinov <razetdi...@gmail.com> wrote:
>> >> From the updated jQuery 1.4 Roadmap:
>>
>> >> > If you need a different object for the scope, why not use the data 
>> >> > argument to transport it?
>>
>> >> In OOP-style applications the handler is often not an anonymous
>> >> function but a link to the current objects's prototype method:
>>
>> >> this._input.bind('change', this._onInputChange, this);
>>
>> >> And all prototype methods expect that 'this' points to the current
>> >> object. If one needs the jQuery object, he could happily use
>> >> event.currentTarget to reach it.
>>
>> >> One would recommend binding all handlers with anonymous functions,
>> >> e.g.:
>>
>> >> var that = this;
>> >> this._input.bind('change', function (event) { that._onInputChange
>> >> (event) });
>>
>> >> 1. It's more verbose. 2. There's no way to unbind this handler.
>>
>> >> On Feb 23, 11:56 pm, Azat Razetdinov <razetdi...@gmail.com> wrote:
>>
>> >> > Passing handler after scope is not suitable for two reasons:
>>
>> >> > 1. There's no way to determine whether data or scope is passed in a
>> >> > three-argument method call.
>> >> > 2. Passing scope after handler is common pattern in JavaScript 1.6
>> >> > methods like forEach.
>>
>> >> > On Dec 25 2008, 11:08 pm, "Eduardo Lundgren"
>>
>> >> > <eduardolundg...@gmail.com> wrote:
>> >> > > The isFunction is faster now but still has more coast that when you 
>> >> > > don't
>> >> > > need to call it.
>>
>> >> > > We should keep the handler as the last parameter to fit with the 
>> >> > > jQuery API,
>> >> > > the change is compatible with it.
>>
>> >> > >   $('div').bind('click', {data: true}, scope, 
>> >> > > *scope.internalHandler*);
>>
>> >> > > Scoping events is a good addition to jQuery.
>>
>> >> > > Ariel, Joern, John? Let me know if it make sense for you.
>>
>> >> > > Thanks,
>> >> > > Eduardo Lundgren
>>
>> >> > > On Thu, Dec 25, 2008 at 11:57 AM, Balazs Endresz
>> >> > > <balazs.endr...@gmail.com>wrote:
>>
>> >> > > > True, but the new isFunction is a couple of times faster than the 
>> >> > > > old
>> >> > > > one, though it's still many times faster to directly call
>> >> > > > Object.prototype.toString, which is far below 0.001ms. But as the
>> >> > > > callback function is the last parameter everywhere in jQuery it 
>> >> > > > might
>> >> > > > be confusing to change this pattern, it just looked more like 
>> >> > > > binding
>> >> > > > the function with a native method for me.
>>
>> >> > > > On Dec 25, 7:06 pm, "Eduardo Lundgren" <eduardolundg...@gmail.com>
>> >> > > > wrote:
>> >> > > > > Hi Balazs,
>>
>> >> > > > > Thanks for give us your opinion.
>>
>> >> > > > > When you use $.isFunction(data) on the bind method it is very 
>> >> > > > > expensive
>> >> > > > when
>> >> > > > > you have a lot of iterations.
>>
>> >> > > > > Diff the file I attached with the original file (rev. 5996) I 
>> >> > > > > made only a
>> >> > > > > small change on the bind() method, and it's compatible with data 
>> >> > > > > and with
>> >> > > > > out API.
>>
>> >> > > > > On Thu, Dec 25, 2008 at 3:05 AM, Balazs Endresz <
>> >> > > > balazs.endr...@gmail.com>wrote:
>>
>> >> > > > > > Hi, I think this would be really useful! I've also modified 
>> >> > > > > > jQuery to
>> >> > > > > > do this a while ago (1.2.6) but with the new scope being the 
>> >> > > > > > last
>> >> > > > > > argument, so it works without the data object as well:
>>
>> >> > > > > > jQuery.fn.bind=function( type, data, fn, bind ) {
>> >> > > > > >                return type == "unload" ? this.one(type, data, 
>> >> > > > > > fn) :
>> >> > > > > > this.each
>> >> > > > > > (function(){
>> >> > > > > >                        if( $.isFunction(data) )
>> >> > > > > >                                jQuery.event.add( this, type, 
>> >> > > > > > data,
>> >> > > > bind, fn
>> >> > > > > > );
>> >> > > > > >                        else
>> >> > > > > >                                jQuery.event.add( this, type, 
>> >> > > > > > fn, data,
>> >> > > > bind
>> >> > > > > > );
>> >> > > > > >                });
>> >> > > > > >        }
>>
>> >> > > > > > jQuery.event = {
>> >> > > > > >        add: function(elem, types, handler, data, bind) {
>> >> > > > > >                if ( elem.nodeType == 3 || elem.nodeType == 8 )
>> >> > > > > >                        return;
>>
>> >> > > > > >                if( bind != undefined )
>> >> > > > > >                        handler = jQuery.bind(handler, bind); 
>> >> > > > > > //change
>> >> > > > scope
>> >> > > > > > ...
>>
>> >> > > > > > jQuery.each( 
>> >> > > > > > ("blur,focus,load,resize,scroll,unload,click,dblclick," +
>>
>> >> > > >  "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,"
>> >> > > > > > +
>> >> > > > > >        
>> >> > > > > > "change,select,submit,keydown,keypress,keyup,error").split(","),
>> >> > > > > > function(i, name){
>>
>> >> > > > > >        // Handle event binding
>> >> > > > > >        jQuery.fn[name] = function(fn, bind){ //second argument 
>> >> > > > > > for the
>> >> > > > > > scope
>> >> > > > > >                return fn ? this.bind(name, fn, bind) :
>> >> > > > this.trigger(name);
>> >> > > > > >        };
>> >> > > > > > });
>>
>> >> > > > > > where jQuery.bind is:
>>
>> >> > > > > > jQuery.bind=function( fn, bind ){
>> >> > > > > >        var args = $.makeArray( arguments ).slice(2);
>> >> > > > > >        if( args.length == 1 && $.isArray( args[0] ) )
>> >> > > > > >                args = args[0];
>> >> > > > > >        return function(){
>> >> > > > > >                return fn.apply( bind, args );
>> >> > > > > >        }
>> >> > > > > > }
>>
>> >> > > > > > On Dec 25, 10:38 am, "Eduardo Lundgren" 
>> >> > > > > > <eduardolundg...@gmail.com>
>> >> > > > > > wrote:
>> >> > > > > > > Hi guys,
>>
>> >> > > > > > > The .bind() method consider the scope of the handler the 
>> >> > > > > > > element
>> >> > > > whose
>> >> > > > > > the
>> >> > > > > > > event is assigned - that is the correct as default.
>>
>> >> > > > > > > I've been playing with the event.js and implemented an 
>> >> > > > > > > alternative to
>> >> > > > > > call
>> >> > > > > > > .bind(), specifying another scope, that looks useful for our 
>> >> > > > > > > api.
>>
>> >> > > > > > > I've attached the event.js modified from the rev. 5996 from 
>> >> > > > > > > the
>> >> > > > trunk.
>> >> > > > > > > The changes are compatible with the current API.
>>
>> >> > > > > > > Here goes one example:
>>
>> >> > > > > > > var scopeTest = function() {
>> >> > > > > > >                 this.name = "iamanotherscope";
>>
>> >> > > > > > >                 this.internalHandler = function(event) {
>> >> > > > > > >                     console.log("I am another scope method.",
>> >> > > > this.name,
>> >> > > > > > > event, event.data);
>> >> > > > > > >                 };
>> >> > > > > > >             };
>>
>> >> > > > > > >             var scope = new scopeTest();
>>
>> >> > > > > > >  $('div').bind('click', {data: true}, globalHandler);
>> >> > > > > > >             $('div').bind('click', {data: true},
>> >> > > > scope.internalHandler);
>> >> > > > > > //
>> >> > > > > > > handler, data, default scope
>> >> > > > > > >             $('div').bind('click', {data: true}, scope,
>> >> > > > > > > scope.internalHandler); // handler, data, pre-defined scope
>>
>> >> > > > > > > Let me know if make sense for you.
>>
>> >> > > > > > > --
>> >> > > > > > > Eduardo Lundgren
>> >> > > > > > > Software Engineer
>> >> > > > > > > Liferay, Inc.
>> >> > > > > > > Enterprise. Open Source. For Life.
>>
>> >> > > > > > >  event.js
>> >> > > > > > > 26KViewDownload
>>
>> >> > > > > --
>> >> > > > > Eduardo Lundgren
>> >> > > > > Software Engineer
>> >> > > > > Liferay, Inc.
>> >> > > > > Enterprise. Open Source. For Life.
>>
>> >> > > --
>> >> > > Eduardo Lundgren
>> >> > > Software Engineer
>> >> > > Liferay, Inc.
>> >> > > Enterprise. Open Source. For Life.

Reply via email to