Hello.
I've created a page wrapper class to contain my javascript, partly to
avoid thrashing with global vars etc, and just organizationally i like
it.
I'm having trouble.
I've created the class following the standard mootools class;
var pageClass = new Class( {
Implements: [Events],
globalControls: function() {
this.account = $(document.body).getElement("[id
$=txtAccount]");
this.randomVariable = true;
},
gControls: null,
initialize: function() {
this.gControls = new globalControls();
this.gControls.account.addEvent('blur', function() {
//this == the account element at this point.
alert(this.value); //works
alert(this.gControls.randomVariable); //fails but
is desired.
});
});
Now, I've tried putting "this" after the function() {} in addEvent, to
re-direct this to the object: like so:
...//SNIPPED
initialize: function() {
this.gControls = new globalControls();
this.gControls.account.addEvent('blur', function() {
//this == the account element at this point.
alert(this.value); //works
alert(this.gControls.randomVariable); //fails
alert(this.gControls.account.value); //would be
acceptable if this were re-set to be the pageClass instance.
}, this); //still fails. this never points to anything but
the account input
globalControls is an inner class to hold references to DOM elements.
I do this, since I'm using .Net, and I have to search by [id
$=elementName], and I don't want to slow things down by doing this
everytime I use a control.
Interestingly enough, the very first time through (initialize),
this.gControls is a recognized variable. It's on the subsequent calls
that it is not (when an actual blur happens).
So my question is this: Is there a way inside a class to make an
event function aware of the class? If so, how? I am trying to avoid
having to use actual global variables. The pages involved use a div
that's populated via ajax and another page, and while I could code
globals that are intersect free per se, I would rather a neater, more
encapsulated approach.
Thanks for any help
--
To unsubscribe, reply using "remove me" as the subject.