Elements
webforJ 开发人员不仅可以从提供的丰富组件库中选择,还可以集成来自其他地方的组件。为方便起见,可以使用 Element
组件来简化从简单 HTML 元素到更复杂的自定义 Web 组件的集成。
Element
组件无法扩展,也不是 webforJ 中所有组件的基础组件。要了解有关 webforJ 组件层次结构的更多信息,请阅读 这篇文章。
显示代码
- Java
- CSS
添加事件
为了利用元素可能附带的事件,可以使用 Element
组件的 addEventListener
方法。添加事件至少需要组件所期望的事件类型/名称和要添加到事件中的监听器。
通过使用事件选项配置,还可以进一步自定义事件。
显示代码
- Java
- CSS
组件交互
Element
组件充当其他组件的容器。它提供了一种组织和检索子组件信息的方式,并提供了一组明确的函数来根据需要添加或删除这些子组件。
添加子组件
Element
组件支持子组件的组合。开 发人员可以通过将组件作为子项添加到 Element
中来组织和管理复杂的 UI 结构。可以使用三种方法在 Element
中设置内容:
-
add(Component... components)
:此方法允许一个或多个组件添加到可选的String
中,该字符串指定在与 Web Component 一起使用时的特定插槽。省略插槽将会在 HTML 标签之间添加组件。 -
setHtml(String html)
:此方法将传递给该方法的String
注入为组件内的 HTML。根据Element
的不同,这可能以不同方式呈现。 -
setText(String text)
:此方法的行为类似于setHtml()
方法,但将文本字面值注入到Element
中。
显示代码
- Java
- CSS
调 用 setHtml()
或 setText()
将替换元素开闭标签之间当前包含的内容。
移除组件
除了向 Element
中添加组件外,还实现了以下方法来移除各种子组件:
-
remove(Component... components)
:此方法接受一个或多个组件,并将其作为子组件移除。 -
removeAll()
:此方法将从Element
中移除所有子组件。
访问组件
要访问 Element
中存在的各种子组件,或有关这些组件的信息,可以使用以下方法:
-
getComponents()
:此方法返回Element
的所有子组件的 JavaList
。 -
getComponents(String id)
:此方法与上面的类似,但将接受特定组件的服务器端 ID,并在找到时返回。 -
getComponentCount()
:返回Element
中存在的子组件的数量。
调用 JavaScript 函数
Element
组件提供两个 API 方法,可以在 HTML 元素上调用 JavaScript 函数。
-
callJsFunction(String functionName, Object... arguments)
:此方法接受函数名称作为字符串,并可选择性传递一个或多个对象作为函数参数。此方法是同步执行的,这意味着 执行线程会被阻塞,直到 JS 方法返回,并导致往返。函数的结果作为Object
返回,可以在 Java 中进行转换和使用。 -
callJsFunctionAsync(String functionName, Object... arguments)
:与前一个方法类似,可以传递函数名称和可选的函数参数。此方法异步执行,并且 不会阻塞执行线程。它返回一个PendingResult
,允许进一步与函数及其负载进行交互。
传递参数
传递给这些方法的参数在执行 JS 函数时将以 JSON 数组序列化。有两种显著的参数类型处理如下:
this
:使用this
关键字将为方法提供对调用组件的客户端版本的引用。Component
:传递到某个 JsFunction 方法的任何 Java 组件实例将被替换为该组件的客户端版本。
同步和异步函数调用将在 Element
被添加到 DOM 后再调用方法,但 callJsFunction()
不会等待任何 component
参数附加 ,这可能导致失败。相反,如果一个组件参数从未附加,调用 callJsFunctionAsync()
可能永远不会完成。
在下面的演示中,向 HTML Button
添加了一个事件。然后通过调用 callJsFunctionAsync()
方法以编程方式触发该事件。结果的 PendingResult
将用于在异步函数完成后创建另一个消息框。
显示代码
- Java
- CSS
执行 JavaScript
除了从应用程序级别执行 JavaScript 外,还可以从 Element
级别执行 JavaScript。这种在 Element
级别执行的能力使 HTML 元素的上下文成为执行的一部分。这是一个强大的工具,让开发人员能够与客户端环境的交互能力。
与函数执行类似,可以使用以下方法来同步或异步执行 JavaScript:
-
executeJs(String script)
:此方法接受String
,将在客户端作为 JavaScript 代码执行。此脚本是同步执行的,这意味着 执行线程会被阻塞,直到 JS 执行返回,导致往返。函数的结果作为Object
返回,可以在 Java 中进行转换和使用。 -
executeJsAsync(String script)
:与前一个方法相同,传递的String
参数将在客户端作为 JavaScript 代码执行。此方法异步执行,并且 不会阻塞执行线程。它返回一个PendingResult
,允许进一步与函数及其负载进行交互。
这些方法可以访问 component
关键字,这使 JavaScript 代码能够访问执行 JavaScript 的组件的客户端实例。