XULEvent (class)
Overview
Summary
The XULEvent class provides an object-oriented wrapper around the native JSFL events fired by the XMLUI.
Contents
Concept
The class provides a familiar model to the developer used to working with AS3 Event handlers, by adding event listeners to the main XUL dialog or individual XULControls, then handling the event with a callback function and Event object that contains properties on which you can take action.
The XUL family is made up of 3 main classes:
- XUL - builds, creates and manages XUL dialogs
- XULControl - an object-oriented way to interact with UI controls
- XULEvent - an object-oriented Event class to handle system and user events in the XMLUI dialog
Usage
The class is actually quite small (only 4 properties!) but is an important one, conceptually.
As with AS3, there are three things you need to do have code react to events in xJSFL:
- Decide on the event and control you want to target
- Create an event handler function to do something when an event fires
- Register the handler using the API
In code, that would look something like this:
// create the event handler function function onChange(event) { var props = ['type', 'control', 'xul', 'xmlui']; for each(var prop in props) { trace(prop + ' : ' + event[prop]); } } var xul = XUL .factory('Type here') .addEvent('typehere', 'change', onChange) // register the handler .show();
The dialog that launches looks like this:
And the result that is traced to the Output panel looks like this:
type : change control : [object XULControl id="typehere" type="textbox" value="Hello"] xul : [object XUL id="0" title="xJSFL" controls:1] xmlui : [object XMLUI]
Event types
Both the XUL and XUL control classes have event that they dispatch, identified by type.
The XUL class dispatches the following event types:
The XULControl classes dispatch the following event types:
The event types available per control are as follows:
Frustratingly, only some native event types are available per control. Why there is no change event for popupslider, checkbox or radiogroup is anyone's guess.
API - properties
All but the type property of the XULEvent class refer to related objects, the properties and methods of which you will want to reference in your event handler code.
type
The type of event, i.e. 'click', 'change', 'create'
The type property is useful when you want to assign the same event handler function to several event types. The following example traces the event when the control is created, but alerts the event when the control is changed:
function onEvent(event) { event.type == 'create' ? trace(event) : alert(event); } var xul = XUL .factory('Type here') .addEvent('typehere', 'create change', onEvent) .show();
control
The xJSFL XULControl the event was dispatched by
The following example alerts the value of the control when changed using the value property of the event.control property:
function onChange(event) { alert(event.control.value); } var xul = XUL .factory('dropdown:Options=[One,Two,Three]') .addEvent('options', 'change', onChange) .show();
xul
The xJSFL XUL instance the control belongs to
The following example creates a small dialog that uses the value of one control to set the value of another control, referenced via xul.controls:
function onChange(event) { event.xul.controls.word.value = words[event.control.value - 1]; // see note about using "this" } var words = ['hello','there','squire']; var xul = XUL .factory('dropdown:Options=[1,2,3],text:Word') .addEvent('options', 'change', onChange) .show();
Note also that that XULEvents are automatically scoped to the parent XUL dialog, so you could just as easily use the keyword this:
this.controls.word.value = words[event.control.value - 1];
If you want to scope this to a different object, do that with XUL.setEventScope().
Comments are closed.