I have an Object that handles all of my page events, I decided to go that way instead of just writing a bunch of functions to help save on GC. I am having a bit of a problem though, it seems that when an event listener is fired there is no way to set scope. So, I have my Object "PageHandler" inside of it there is a function "pageChange", that is to be called whenever the visualization table gets its page changed, so I can re-setup actions on the items in the table. Everything was seemingly working fine until I needed to switch the page from just using a Table type of chart, to using a Dashboard, so that my users could search the table. Now that I have it setup as a Dashboard, I have my "ready" event setup to run a function that attaches the rest of the event functions on the table itself, since you can't access a Wrappers chart until after the dashboard ready event. That is just written as a standalone function, inside of which I instantiate my new Object and attach the page event, like so...
function setup() {
page = new PageHandler();
google.visualization.events.addListener(page.getChart(), 'page', page.pageChange);
}
That is an extremely simplistic version of the function, but you get the idea. The problem comes in pageChange, there is no scope. Here is a very...very simple snippet that will represent this...
var PageHandler = function() { }
PageHandler.prototype = {
getChart: function() {
return dash.dashboardParts.mainTable.getChart();
},
pageChange: function() {
console.log(this);
}
}
now dash is my object, and dashboardParts.mainTable is new google.visualization.ChartWrapper({...}); so I am using getChart on it to get the underlying table chart. The problem is, inside pageChange when I console.log(this); it is logging undefined.
Is there any possible way to allow for proper scoping of the functions getting run when the event handler is called? I have had to do some pretty terrible workarounds that I really do not want to ever have in a production environment, but I have to have scope somehow. Any help would be greatly appreciated. Thank you.