? So if the event is attached with:
this.textboxRect.addEventListener("click",this,false);

and I use your exact "bind" method,
then the exact code for the handler is:

textbox.prototype.handleEvent=bind(textbox,function(evt){
  alert(this);
});

The alert gives:
[EMAIL PROTECTED]

"this" is still not working... What is wrong here?

Cameron McCormack-4 wrote:
> 
> Hi.
> 
> snapper:
>> How can I get object reference instead of window reference in
>> this.handleEvent(evt)?
>> 
>> I have ECMAScript in a Batik SVG application using widgets. I noticed
>> that
>> the Carto textbox does not work in Batik due to event handing problems,
>> so I
>> am rewriting it. Andreas attached event handlers using the root element
>> in
>> all cases, which causes many problems. I am attaching events to the
>> widget
>> elements instead like this:
>> 
>> this.textboxRect.addEventListener("click",this._handleEvent,false);
>> 
>> The event handler in the textbox object does receive the event, but
>> inside
>> the this.handleEvent(evt), the "this" refers to the window object. We
>> really
>> want the reference to the textbox object.
>> 
>> How can I get the reference to the textbox object inside the event
>> handler
>> in this case?
> 
> This is normal behaviour: when you refer to this._handleEvent, it is
> just a reference the function that has been stored in the 'this'
> object–it has lost its association with the object.  If you want to be
> able to access the 'this' object from _handleEvent, you can refer to
> the object from the closure when you assign it.  For example:
> 
>   blah._handleEvent = function(evt) {
>       // refer to 'blah' in here
>   };
> 
> I often use a function to bind the the 'this' variable to an object of
> my choosing, so that I can do what you want to do.
> 
>   function bind(_this, f) {
>       var _ = function() {
>           return f.apply(_this, arguments);
>       };
>       _.toString = function() {
>           return "/* bound function */\n" + String(f);
>       };
>       return _;
>   }
> 
> and then:
> 
>   blah._handleEvent = bind(blah, function() {
>       // now 'this' inside here will always refer to 'blah',
>       // regardless of how the function was called.
>   });
> 
> -- 
> Cameron McCormack, http://mcc.id.au/
>       xmpp:[EMAIL PROTECTED]  ▪  ICQ 26955922  ▪  MSN [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/addEventListener-bug-this%3Dwindow-tf2626185.html#a7339308
Sent from the Batik - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to