I use SWFAddress for deep linking my site (link to SWFAddress). I like to break code into classes so I have a main structure similar to this:
function SomeClass() {
// This adds the this.handleChange() function to the
// SWFAddress event listener
this.initializeSWFA = function() {
// SWFAddress variable is instantiated in SWFAddress javascript file
// so I can use it here
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
}
// SWFAddress is supposed to call this function
this.handleChange = function(evt) {
// Some code here
}
}
// Instantiate the SomeClass
var someVar = new SomeClass();
someVar.initializeSWFA();
This line does not work here:
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
I tried changing it to:
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange());
or
var self = this;
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, self.handleChange);
And these don't work either.
So how do I reference a JavaScript function from a class in a situation like this?
If the function handleChange would be outside of the class I can write the function's name.
First, thank you for all the answers. I am still trying to figure how this all works in JavaScript. I am not used to the object oriented model like here in JavaScript.
This is the solution for now. I still can't figure out how to do this nicely in JavaScript, but this solution works. I tried to implement the solution suggested by ehudokai (thank you), however I was not able to make it work.
function SomeClass() {
// This adds the this.handleChange() function to the
// SWFAddress event listener
this.initializeSWFA = function() {
// SWFAddress variable is instantiated in SWFAddress javascript file
// so I can use it here
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, someFunc);
}
// SWFAddress suppose to call this function
this.handleChange= function(evt) {
// Some code here
}
}
// Instantiate the SomeClass
var someVar = new SomeClass();
function someFunc(evt) {
someVar.handleChange(evt);
}
someVar.initializeSWFA();
I don't like this because this involves defining one extra function, so it takes extra space if anybody figures out how to add a method to SWFAddress EventListener from a JavaScript object. Please help me out.