[Rails-spinoffs] Re: events within classes - what am i doing wrong?

2008-03-24 Thread Dan Dorman

On Mon, Mar 24, 2008 at 5:49 PM, dave [EMAIL PROTECTED] wrote:
  The mousedown event is created as well.  Now Click in the blue box...
  the event is received, but the class doesn't know the value of it's
  member anymore...

It's basically a context issue.

From your code:

this.div.observe('mousedown', this.mouseDown);

Which is great: it sets up the mouseDown function of your class to
respond to the onmousedown event. However, when that div calls the
observe() method, Prototype automatically sets up the event handler so
that it is /div/ that gets treated as this when the event is
triggered.

It's sort of like div has its own copy of your class's mouseDown
method, so when mouseDown() actually starts running, and it gets to
the line

$('output').innerHTML += (this.div + br);

the this.div is being parsed as div.div--and div doesn't /have/ a
div property. Hence the undefined.

Fortunately, it's easy to put that function back into the proper
context, by binding the scope of the event handling function.
Revisiting that first line from your code:

this.div.observe('mousedown', this.mouseDown.bindAsEventListener(this));

Note that call to bindAsEventListener(). The argument is the object
whose context you want that method to be in when it's actually called.
So now when mouseDown gets called, your class instance is running the
show and since it /does/ have a div property, you shouldn't get that
pesky undefined.

I'm not sure my explanation was particularly good, but you can find
out lots more about this from the API docs:
http://prototypejs.org/api/function (take a look at bind /and/
bindAsEventListener).

Hope that helps.

:Dan

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Spinoffs group.
To post to this group, send email to rubyonrails-spinoffs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~--~~~~--~~--~--~---



[Rails-spinoffs] Re: events within classes - what am i doing wrong?

2008-03-24 Thread dave

excellent.  and good description too.
Thank you so much dan!!


On Mar 24, 5:14 pm, Dan Dorman [EMAIL PROTECTED] wrote:
 On Mon, Mar 24, 2008 at 5:49 PM, dave [EMAIL PROTECTED] wrote:
   The mousedown event is created as well.  Now Click in the blue box...
   the event is received, but the class doesn't know the value of it's
   member anymore...

 It's basically a context issue.

 From your code:

 this.div.observe('mousedown', this.mouseDown);

 Which is great: it sets up the mouseDown function of your class to
 respond to the onmousedown event. However, when that div calls the
 observe() method, Prototype automatically sets up the event handler so
 that it is /div/ that gets treated as this when the event is
 triggered.

 It's sort of like div has its own copy of your class's mouseDown
 method, so when mouseDown() actually starts running, and it gets to
 the line

 $('output').innerHTML += (this.div + br);

 the this.div is being parsed as div.div--and div doesn't /have/ a
 div property. Hence the undefined.

 Fortunately, it's easy to put that function back into the proper
 context, by binding the scope of the event handling function.
 Revisiting that first line from your code:

 this.div.observe('mousedown', this.mouseDown.bindAsEventListener(this));

 Note that call to bindAsEventListener(). The argument is the object
 whose context you want that method to be in when it's actually called.
 So now when mouseDown gets called, your class instance is running the
 show and since it /does/ have a div property, you shouldn't get that
 pesky undefined.

 I'm not sure my explanation was particularly good, but you can find
 out lots more about this from the API 
 docs:http://prototypejs.org/api/function(take a look at bind /and/
 bindAsEventListener).

 Hope that helps.

 :Dan
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Spinoffs group.
To post to this group, send email to rubyonrails-spinoffs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~--~~~~--~~--~--~---