JQuery.proxy is your friend

I'm a Javascript/JQuery newbie and one of the first puzzles that I ran into is callback functions and the value of "this".

You set up a callback handler like so:


jQuery.getJSON('/address/list', this.myCallback);


And you expect that when your callback is invoked that "this" will be set to the value of the enclosing object:


myCallback: function(json) {
    this.doSomething(); // doesnt work!
},
doSomething: function() // ...




What you (not so quickly) discover is that JQuery sets the value of "this" to the DOM object (or the element within the DOM that triggered the callback).  It is *not* set to the object that holds your callback function!

The solution is to use JQuery's proxy wrapper:


jQuery.getJSON('/address/list', JQuery.proxy(this.myCallback,this));


You will want to read  this and this for a full explanation.

BTW - none of these results floated to the top of the Google machine. If you are newbie, you probably don't know that you need JQuery.proxy :-).  Hopefully this will help





Post a Comment

Popular posts from this blog

Apache reverse proxy with LDAP authentication

Stupid Oracle vktm tricks to improve VirtualBox performance

SAML Federation in OAM 11g R2