Buttons: Functions
When you create a button, the second parameter is the name of a function.
When you assign one function to several buttons, exactly the same
code will be executed for each of them.
There is however a way to
write generic functions for more than one button and yet get
individual behavior. When a button is clicked,
MapClient executes the function that was specified on button creation.
However, it always passes the address of the button object as the first
parameter to this function. This means that you can access all internal
properties of
the button from within the function. These are in themselves not very
interesting, but you can assign your own values to the button when you create
it, and
use these in the function. This is a difficult concept, so let us try to make
it clearer with an example:
.
Buttons are created just like before, but with one addition: each button
object is assigned a variable (called projName)
which is filled with the string that MapServer uses to set this projection:
b1 = new button("Miller",setProjection)
b1.projName = "mill"
function setProjection(b) {
var projString = "proj=" + b.projName + ",ellps=clrk66"
w.setVar("map_projection",projString)
submitWin()
}
All buttons have the same callback function: setProjection():
This function has one parameter: the button object that called it.
Within
the function the internal variables of this button can be accessed
by button.<variable-name>. As we created a variable called
projName for every button, the function can access this as b.projName, and build
the projection string needed for MapServer.
In this way, all projections available in MapServer are shown in
.