Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
49
rated 0 times [  54] [ 5]  / answers: 1 / hits: 15168  / 14 Years ago, wed, december 8, 2010, 12:00:00

I'm just learning about how to best organize my javascript code, and I had a question regarding this small piece of code I wrote:



var reportsControllerIndex = {
plotMapPoints: function(data) {
//plots points
},

drawMap: function() {
$.getJSON('/reports.json', function(data) {
reportsControllerIndex.plotMapPoints(data);
});
},

run: function() {
reportsControllerIndex.drawMap();
}
};


The question is regarding calling another function of reportsControllerIndex from within the reportsControllerIndex object. I had first tried the following piece of code for the run function:



run: function() {
this.drawMap();
}


which worked perfectly. However, I then quickly found doing this for the drawMap function:



drawMap: function() {
$.getJSON('/reports.json', function(data) {
this.plotMapPoints(data);
});
}


does not work, since this would now refer to the callback function of the getJSON call.



My solution was to just place reportsControllerIndex in front of all of the methods I want to call, but I was curious: is there a more relative way for calling functions within an overall object like this (much like you'd do with a class in a standard OO language)? Or am I forced to do it as I am currently, just calling the methods through the name of the object?


More From » object

 Answers
5

You want to store the this binding in a variable.



drawMap: function() {
var _this = this;
$.getJSON('/reports.json', function(data) {
_this.plotMapPoints(data);
});
}

[#94672] Tuesday, December 7, 2010, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
teagan

Total Points: 98
Total Questions: 106
Total Answers: 101

Location: Tajikistan
Member since Thu, Apr 14, 2022
2 Years ago
;