I\'m having somewhat of an odd issue with trying to piece together a somewhat dynamic Google Maps display. I have overlays on a map that I would like to call a function when
Have showArea
return a function that works with the id.
function showArea(id) {
return function() {
// do stuff with id
};
}
The returned function closes over id
so it continues to reference it, and is passed to addListener
to be used as the handler.
Alternately, you could just inline the function that calls showArea(1)
...
google.maps.event.addListener(southEast, 'click', function() { showArea(1); });
function showArea(id) {
// do stuff based on that id
}
This will work because you're hardcoding the 1
. If it was a variable that could change, like in a loop, you'd use the first example.
bind()
.You could also use bind()
that binds the function and allows you to pass parameters to that method, without running the method on initialization.
google.maps.event.addListener( southEast, 'click', showArea.bind( this, 1 ) );
With bind()
, the first parameter is always the context (e.g. this
) and any other parameters will be passed to the method itself. So,
bind
, bind
, Note, I'm not a Javascript expert so not sure if there are any implications with this strategy that I'm overlooking.
myFunction(msg) {console.log(msg)} // example function
myFunction('hello world') // myFunction called "immediately"
() => myFunction('hello world') // myFunction not called here; returns myFunction
function() { return myFunction('hello world') } // myFunction not called here; returns myFunction