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
.