Elements
webforJ-Entwickler haben die Möglichkeit, nicht nur aus der umfangreichen Bibliothek von bereitgestellten Komponenten auszuwählen, sondern auch Komponenten von anderswo zu integrieren. Um dies zu erleichtern, kann die Element
-Komponente verwendet werden, um die Integration von allem, von einfachen HTML-Elementen bis hin zu komplexeren benutzerdefinierten Webkomponenten, zu vereinfachen.
Die Element
-Komponente kann nicht erweitert werden und ist nicht die Basis-Komponente für alle Komponenten innerhalb von webforJ. Um mehr über die Komponenten-Hierarchie von webforJ zu erfahren, lesen Sie diesen Artikel.
Code anzeigen
- Java
- CSS
Hinzufügen von Ereignissen
Um Ereignisse, die mit Ihrem Element verbunden sein können, zu nutzen, können Sie die Methoden addEventListener
der Element
-Komponente verwenden. Das Hinzufügen eines Ereignisses erfordert mindestens den Typ/Namen des Ereignisses, das die Komponente erwartet, und einen Listener, der dem Ereignis hinzugefügt wird.
Es gibt auch zusätzliche Optionen, um Ereignisse weiter anzupassen, indem die Ereignisoptionen-Konfigurationen verwendet werden.
Code anzeigen
- Java
- CSS
Komponenteninteraktion
Die Element
-Komponente fungiert als Container für andere Komponenten. Sie bietet eine Möglichkeit, Informationen für Kindkomponenten zu organisieren und abzurufen und bietet eine klare Reihe von Funktionen, um diese Kindkomponenten nach Bedarf hinzuzufügen oder zu entfernen.
Hinzufügen von Kindkomponenten
Die Element
-Komponente unterstützt die Komposition von Kindkomponenten. Entwickler können komplexe UI-Strukturen organisieren und verwalten, indem sie Komponenten als Kinder der Element
hinzufügen. Es gibt drei Methoden, um Inhalte innerhalb eines Element
festzulegen:
-
add(Component... components)
: Diese Methode ermöglicht es, eine oder mehrere Komponenten zu einem optionalenString
hinzuzufügen, der einen bestimmten Slot bezeichnet, wenn er mit einer Web-Komponente verwendet wird. Das Weglassen des Slots fügt die Komponente zwischen den HTML-Tags hinzu. -
setHtml(String html)
: Diese Methode nimmt den übergebenenString
und injiziert ihn als HTML innerhalb der Komponente. Abhängig von derElement
kann dies auf unterschiedliche Weise gerendert werden. -
setText(String text)
: Diese Methode verhält sich ähnlich wie die MethodesetHtml()
, injiziert jedoch literalen Text in dasElement
.
Code anzeigen
- Java
- CSS
Das Aufrufen von setHtml()
oder setText()
ersetzt den Inhalt, der derzeit zwischen den öffnenden und schließenden Tags des Elements enthalten ist.
Entfernen von Komponenten
Zusätzlich zum Hinzufügen von Komponenten zu einem Element
sind die folgenden Methoden zur Entfernung verschiedener Kindkomponenten implementiert:
-
remove(Component... components)
: Diese Methode nimmt eine oder mehrere Komponenten und entfernt sie als Kindkomponenten. -
removeAll()
: Diese Methode entfernt alle Kindkomponenten aus demElement
.
Zugriff auf Komponenten
Um auf die verschiedenen Kindkomponenten innerhalb eines Element
oder Informationen über diese Komponenten zuzugreifen, stehen die folgenden Methoden zur Verfügung:
-
getComponents()
: Diese Methode gibt eine JavaList
aller Kinder desElement
zurück. -
getComponents(String id)
: Diese Methode ist ähnlich wie die oben genannte Methode, nimmt jedoch die serverseitige ID einer bestimmten Komponente und gibt sie zurück, wenn sie gefunden wird. -
getComponentCount()
: Gibt die Anzahl der in demElement
vorhandenen Kindkomponenten zurück.
Aufrufen von JavaScript-Funktionen
Die Element
-Komponente bietet zwei API-Methoden, mit denen JavaScript-Funktionen auf HTML-Elementen aufgerufen werden können.
-
callJsFunction(String functionName, Object... arguments)
: Diese Methode nimmt einen Funktionsnamen als String und optional ein oder mehrere Objekte als Parameter für die Funktion. Diese Methode wird synchron ausgeführt, was bedeutet, dass der ausführende Thread blockiert ist, bis die JS-Methode zurückkehrt und zu einer Round-Trip führt. Die Ergebnisse der Funktion werden alsObject
zurückgegeben, das in Java umgewandelt und verwendet werden kann. -
callJsFunctionAsync(String functionName, Object... arguments)
: Wie bei der vorherigen Methode kann ein Funktionsname und optionale Argumente für die Funktion übergeben werden. Diese Methode wird asynchron ausgeführt und blockiert nicht den ausführenden Thread. Sie gibt einPendingResult
zurück, das eine weitere Interaktion mit der Funktion und ihrem Payload ermöglicht.
Parameter übergeben
Argumente, die an diese Methoden übergeben werden und in der Ausführung von JS-Funktionen verwendet werden, werden als JSON-Array serialisiert. Es gibt zwei bemerkenswerte Argumenttypen, die wie folgt behandelt werden:
this
: Die Verwendung desthis
-Schlüsselworts gibt der Methode eine Referenz auf die clientseitige Version der aufrufenden Komponente.Component
: Alle Java-Komponenteninstanzen, die in eine der JsFunction-Methoden übergeben werden, werden durch die clientseitige Version der Komponente ersetzt.
Sowohl der synchrone als auch der asynchrone Funktionsaufruf warten darauf, eine Methode aufzurufen, bis das Element
zum DOM hinzugefügt wurde, bevor eine Funktion ausgeführt wird. Aber callJsFunction()
wartet nicht darauf, dass irgendwelche component
-Argumente angehängt werden, was zu einem Fehler führen kann. Im Gegensatz dazu könnte das Aufrufen von callJsFunctionAsync()
nie abgeschlossen werden, wenn ein Komponentenargument nie angehängt wird.
Im folgenden Demo wird ein Ereignis zu einem HTML Button
hinzugefügt. Dieses Ereignis wird dann programmatisch ausgelöst, indem die Methode callJsFunctionAsync()
aufgerufen wird. Das resultierende PendingResult
wird dann verwendet, um eine weitere Nachrichtenbox zu erstellen, sobald die asynchrone Funktion abgeschlossen ist.
Code anzeigen
- Java
- CSS
Ausführen von JavaScript
Neben der Ausführung von JavaScript auf Anwendungsebene ist es auch möglich, JavaScript auf Elementebene auszuführen. Diese Ausführung auf Elementebene ermöglicht es, den Kontext des HTML-Elements in die Ausführung einzubeziehen. Dies ist ein leistungsstarkes Werkzeug, das als Verbindung für Entwickler zu interaktiven Fähigkeiten mit clientseitigen Umgebungen dient.
Ähnlich wie bei der Funktionsausführung kann die Ausführung von JavaScript synchron oder asynchron mit den folgenden Methoden erfolgen:
-
executeJs(String script)
: Diese Methode nimmt einenString
, der als JavaScript-Code im Client ausgeführt wird. Dieses Skript wird synchron ausgeführt, was bedeutet, dass der ausführende Thread blockiert ist, bis die JS-Ausführung zurückkehrt und zu einer Round-Trip führt. Die Ergebnisse der Funktion werden alsObject
zurückgegeben, das in Java umgewandelt und verwendet werden kann. -
executeJsAsync(String script)
: Wie bei der vorherigen Methode wird ein übergebenerString
-Parameter als JavaScript-Code im Client ausgeführt. Diese Methode wird asynchron ausgeführt und blockiert nicht den ausführenden Thread. Sie gibt einPendingResult
zurück, das eine weitere Interaktion mit der Funktion und ihrem Payload ermöglicht.
Diese Methoden haben Zugriff auf das Schlüsselwort component
, das dem JavaScript-Code Zugriff auf die clientseitige Instanz der Komponente gibt, die das JavaScript ausführt.