Actions and Effects
[since 5.0.6]
The client-side action (CSA) is used to control how to perform an action at the client. Typical use is to control the effect of showing or hiding a widget. For example, with CSA, you could use the so-called slide-down effect to display a widget.
It is a generic feature available to HtmlBasedComponent, so you could apply to almost all widgets.
CSA allows the developer to control some actions without JavaScript. If you want to have the full control (and are OK to write some JavaScript code), please refer to ZK Client-side Reference for the complete control of the client-side behavior.
How to Apply Client-side Actions
To apply the client-side action to a widget, you have to assign a value to the action
property (HtmlBasedComponent.setAction(String)). The syntax is as follows.
action="action-name1: effect1; action-name2: effect2"
The action name (e.g., action1
) has to be one of the predefined names, such as show and hide. The action effect (e.g., effect1
) has to be one of the predefined effects, such as slideDown and slideUp.
For example, we could use the slide-down effect to display a window as follows[1].
<zk>
<button label="Show a modal window" onClick="wnd.doModal()"/>
<window id="wnd" title="Modal" border="normal" width="300px"
action="show: slideDown" visible="false">
This is a modal window.
</window>
</zk>
In addition, you could specify additions options by enclosing it with the parentheses as follows.
<div action="show: slideDown({duration: 1000}); hide: slideUp({duration: 300})">
....
</div>
which specifies the duration of sliding down is 100 milliseconds, and the duration of sliding-up is 300 milliseconds.
Security Note: the optios is actually a JavaScript object (i.e., a map, Map), and ZK passes whatever being specified to the client for evaluation. Thus, if you allow the user to specify the effect, you shall encode it first to avoid cross-site scripting.
- ↑ If you are using the effects with a modal window, it is important to specify the width. Otherwise, the calculation of the position might be wrong.
Predefined Actions
Here is a list of predefined actions.
Name | Description |
---|---|
show | The show action is used to display a widget (making a widget visible).
When a visible widget is attached to a page, the |
hide | The hide action is used to hide a widget (making a widget invisible).
When a visible widget is detached from a page, the |
invalidate | The invalidate action is invoked when a visible widget is invalidated, i.e., when Component.invalidate() is called.
Example, |
Predefined Effects
Here is a list of predefined actions.
Name | Description |
---|---|
slideDown | Slides down to display this widget (making a widget visible). |
slideUp | Slides up to hide this widget. (making a widget invisible) |
slideIn | Slides in to display this widget (making a widget visible). |
slideOut | Slides out to hide this widget (making a widget invisible). |
Predefined Options for Actions
Option Name | Acceptable Values | Description |
---|---|---|
anchor | t, b, l, r | The 4 values represent the direction to slide: top to bottom , bottom to top, left to right, right to left respectively. |
duration | a number of millisecond | The time to slide up/down/in/out a widget. The larger the time, the slower a wiget slides. |
Custom Actions
If you want to take some actions other than the predefined actions listed above, you have to override the correspond method at client. For example, suppose you'd like to change the color when a label's value (Label.setValue(String)) is changed. Then, you could do as follows:
<label id="inf2">
<attribute w:name="setValue">
function (value, fromServer) {
this.$setValue(value, fromServer);
if (this.desktop) {
this._red = !this._red;
this.setStyle('background:'+(this._red ? 'red':'green'));
}
}
</attribute>
</label>
For more information, please refer to ZK Client-side Reference: Widget Customization.
Custom Effects
For adding your custom effects, please refer to ZK Client-side Reference: Customization: Actions and Effects for details.
Notes for Upgrading from ZK 3
They are both called Client-side Actions, but they are different and you have to rewrite them to make it work under ZK 5:
- The action names was changed and the support is limited to
show
andhide
(while ZK 3 supports anyonxxx
). - The action operation must be the name of one of the methods defined in Actions (while ZK 3 is the JavaScript code).
- It is part of HtmlBasedComponent (while ZK 3 is XulElement).
Version History
Version | Date | Content |
---|---|---|
5.0.6 | December 2010 | Client-side actions were introduced since 5.0.6 |