|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objecteu.webtoolkit.jwt.JSlot
public class JSlot
A slot that is only implemented in client side JavaScript code.
This class provides a hook for adding your own JavaScript to respond to events.
Carefully consider the use of this. Not only is writing cross-browser JavaScript hard and tedious, but one must also be aware of possible security problems (see further), and ofcourse, the event handling will not be available when JavaScript is disabled or not present at all.
For some purposes, stateless slot implementations are not sufficient, since
they do not allow state inspection. At the same time, the non-availability in
case of disabled JavaScript may also be fine for some non-essential
functionality (see for example the WSuggestionPopup widget), or when
you simply do not care. For these situations a JSlot can be used to add
client-side event handling.
The JavaScript code may be set (or changed) using the
setJavaScript() method which takes a
string that implements a JavaScript function with the following signature:
function(sender, event) {
// handle the event, and sender is a reference to the DOM element
// which captured the event (and holds the signal). Therefore it
// equivalent to the sender for a normal %Wt slot.
// You can prevent the default action using:
${WT_CLASS}.cancelEvent(event);
// (where ${WT_CLASS} should be the value of the WT_CLASS define
}
In the JavaScript code, you may use WWidget#getJsRef() to obtain the DOM element corresponding to any
WWidget, or WObject#getId() to obtain the DOM
id. In addition you may trigger server-side events using the JavaScript
WtSignalEmit function (see JSignal documentation). That's how
far we can help you. For the rest you are left to yourself, buggy browsers
and quirky JavaScript (http://www.quirksmode.org/ was a
reliable companion to me) -- good luck.
Note that the slot object needs to live as long as you want the JavaScript to
be executed by connected signals: when the slot is destroyed, the connection
is destroyed just as with other signal/slot connections where the target
object is deleted. This means that it is (almost?) always a bad idea to
declare a JSlot on the stack.
| Constructor Summary | |
|---|---|
JSlot()
Constructs a JavaScript-only slot within the parent scope. |
|
JSlot(java.lang.String javaScript)
Constructs a JavaScript-only and sets the JavaScript code. |
|
JSlot(java.lang.String javaScript,
WWidget parent)
Constructs a JavaScript-only and sets the JavaScript code. |
|
JSlot(WWidget parent)
Constructs a JavaScript-only slot within the parent scope. |
|
| Method Summary | |
|---|---|
void |
exec()
Executes the JavaScript code. |
void |
exec(java.lang.String object)
Executes the JavaScript code. |
void |
exec(java.lang.String object,
java.lang.String event)
Executes the JavaScript code. |
java.lang.String |
execJs()
Returns a JavaScript statement that executes the slot. |
java.lang.String |
execJs(java.lang.String object)
Returns a JavaScript statement that executes the slot. |
java.lang.String |
execJs(java.lang.String object,
java.lang.String event)
Returns a JavaScript statement that executes the slot. |
void |
setJavaScript(java.lang.String js)
Sets or modify the JavaScript code associated with the slot. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public JSlot(WWidget parent)
The JavaScript code block will reside within the scope of the given widget. By picking a long-lived parent, one may reuse a single block of JavasCript code for multiple widgets.
When parent = null, then the JavaScript will be
inlined in each caller (possibly replicating the same JavaScript).
public JSlot()
Calls this((WWidget)null)
public JSlot(java.lang.String javaScript,
WWidget parent)
JSlot(WWidget parent),
setJavaScript(String js)public JSlot(java.lang.String javaScript)
Calls this(javaScript,
(WWidget)null)
| Method Detail |
|---|
public void setJavaScript(java.lang.String js)
When the slot is triggered, the corresponding function defined by
javaScript is executed.
The JavaScript function takes two parameters and thus should look like:
function(obj, event) {
// ...
}
The first parameter obj is a reference to the DOM element
that generates the event. The event refers to the JavaScript
event object.
WWidget.getJsRef()
public void exec(java.lang.String object,
java.lang.String event)
This executes the JavaScript code in the same way as when triggered by a
EventSignal. This function returns immediately, and execution of
the JavaScript code is deferred until after the event handling.
The arguments are the "object, event" arguments of
the JavaScript event callback function.
setJavaScript(String js)public final void exec()
Calls exec("null", "null")
public final void exec(java.lang.String object)
Calls exec(object, "null")
public java.lang.String execJs(java.lang.String object,
java.lang.String event)
This returns the JavaScript code to execute the slot.
The arguments are the "object, event" arguments of
the JavaScript event callback function.
exec(String object, String event)public final java.lang.String execJs()
Returns execJs("null",
"null")
public final java.lang.String execJs(java.lang.String object)
Returns execJs(object,
"null")
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||