<event>
The sender in Laszlo's point-to-point event system.

JavaScript: lz.event

Events underly most of the functionality in OpenLaszlo applications. Unlike events in similar systems, OpenLaszlo's events are point-to-point, meaning that there is no general broadcast mechanism for events, and events do not trickle up or down the instance hierarchy. Instead, objects called <handler>s use LzDelegate.register() to register to receive events.

An event is implicitly declared for every attribute of a class or instance and sent when that attribute is changed. So, for instance, if a class has an attribute foo, you can receive events when foo changes by registering for the onfoo event.

Events are sent with a single argument, which usually conveys information about the property that changed. The default behavior of the LzEventable.setAttribute() method is to set the named property and send the event called "on" + property. This is general mechanism that updates constraints in a OpenLaszlo programs. For instance, when a view changes its x position, it sends the event onx with the new value for its x property.

Example 14. Event sending in response to setting an attribute

<canvas height="40">
   <simplelayout/>
   <button name="eventSender" onmouseover="this.setAttribute('avalue', this.avalue + 10)" onmouseout="this.setAttribute('avalue', this.avalue + 5)">
     <attribute name="avalue" value="0"/>
   </button>

   <view bgcolor="red" width="20" height="20">
     // Handle the implicit `onavalue` event of the `eventSender` button
     <handler name="onavalue" reference="eventSender" args="v">
       this.setAttribute('x' , v);
     </handler>

   </view>
 </canvas>

An event can be explicitly declared using the <event> tag and the sendEvent method is used to explicitly send an event.

Example 15. A simple example of publishing and listening for a custom event

<canvas height="140" debug="true">
   <simplelayout/>
   <button name="eventSender" onmouseover="this.customevent.sendEvent('over')" onmouseout="this.customevent.sendEvent('out')">
     <event name="customevent"/>
   </button>

   <view bgcolor="red" width="20" height="20">
     <handler name="customevent" reference="eventSender" args="event">
       Debug.debug("event: %s", event);
       this.setAttribute('x', this.x + 10);
     </handler>
   </view>
 </canvas>

Sending an event that no delegate is listening for has nearly no cost, thus objects can freely publish events.

See the Developer's Guide for more detailed information on using events and delegates.

Methods

sendEvent()
event.sendEvent(eventValue : *);
Sends an event to all the delegates that are registered to receive this event. Each registered delegate's method will be called with the single argument of sendEvent.
Parameter Name Type Description
eventValue * (Optional) The value to pass when executing the delegates registered to receive the event. If omitted, null will be sent.

Methods inherited from lz.DeclaredEventClass

sendEvent