14.4.2. Object Model
VSPX controls are SQL user defined type instances, or objects. The SQL object system is substantially similar to any other single inheritance object system, such as that of Java or C#. The XML source code of the VSPX page is processed to generate SQL for instantiating the VSPX control tree. The XML elements and classes may have similar names but are not one to one identical.
All controls, including pages, are instances of a subclass of
vspx_control
. To each VSPX source file corresponds a class named after the file, which
inherits the common superclass
vspx_page
. Normally, all code, regardless of which specific control on the page it
pertains to, runs inside a method of the page, thus the
self (like 'this' in Java or C++) refers to the page
instance. By convention, the variable control
references the object representing the control which declares the particular
code snippet. The variable
e
represents the event which is at the root of the code being invoked. The
event is normally an event object representing a GET or POST HTTP request,
but it can also be a user defined event sent to the page by other code on
the page or elsewhere.
The page has a data member
vc_children
which contains an array of all top level VSPX controls on the page. Each
control in turn has this same variable for referring to subordinate
controls, if any.
Each processing pass allows the developer to specify arbitrary SQL code to run in the context of the pass. The code runs in the context of a method of the page object, where the local variable control references the control that declares the code in question.
Controls may be enabled or disabled, thus supporting conditional activation and rendering of page parts. Parts may be enabled in function of a page state, for example a search result control is only on after the search text has been posted. Another example is that some controls may only be enabled if a user is logged in.
Code inside a control may locate other controls on the page by name, either
starting from the control itself or at the page. Note that when repeating
control groups are involved, it is best to start at the leaf and work
upwards in the tree, since there can be several identically named children
of the page. All controls have a name which is unique in terms of the VSPX
source file. Additionally, all controls, including members of repeating
groups, have a name which is generated to be unique at run time. The latter
is not however constant. The
vc_parent
data member references the parent.
vc_name
is the name as appears in the name attribute of the corresponding XML
element.
vc_instance_name
is a page-wide unique name, generated to be different for each possible
repetition of the control. The
find_control
method of
vspx_control
can be used to look for a child with a specific
vc_name
.