跳至主要内容

Elements

在 ChatGPT 中打开
23.06
Java API

webforJ 开发人员不仅可以从提供的丰富组件库中选择,还可以集成来自其他地方的组件。为方便起见,可以使用 Element 组件来简化从简单 HTML 元素到更复杂的自定义 Web 组件的集成。

important

Element 组件无法扩展,也不是 webforJ 中所有组件的基础组件。要了解有关 webforJ 组件层次结构的更多信息,请阅读 这篇文章

显示代码

添加事件

为了利用元素可能附带的事件,可以使用 Element 组件的 addEventListener 方法。添加事件至少需要组件所期望的事件类型/名称和要添加到事件中的监听器。

通过使用事件选项配置,还可以进一步自定义事件。

显示代码

组件交互

Element 组件充当其他组件的容器。它提供了一种组织和检索子组件信息的方式,并提供了一组明确的函数来根据需要添加或删除这些子组件。

添加子组件

Element 组件支持子组件的组合。开发人员可以通过将组件作为子项添加到 Element 中来组织和管理复杂的 UI 结构。可以使用三种方法在 Element 中设置内容:

  1. add(Component... components):此方法允许一个或多个组件添加到可选的 String 中,该字符串指定在与 Web Component 一起使用时的特定插槽。省略插槽将会在 HTML 标签之间添加组件。

  2. setHtml(String html):此方法将传递给该方法的 String 注入为组件内的 HTML。根据 Element 的不同,这可能以不同方式呈现。

  3. setText(String text):此方法的行为类似于 setHtml() 方法,但将文本字面值注入到 Element 中。

显示代码

提示

调用 setHtml()setText() 将替换元素开闭标签之间当前包含的内容。

移除组件

除了向 Element 中添加组件外,还实现了以下方法来移除各种子组件:

  1. remove(Component... components):此方法接受一个或多个组件,并将其作为子组件移除。

  2. removeAll():此方法将从 Element 中移除所有子组件。

访问组件

要访问 Element 中存在的各种子组件,或有关这些组件的信息,可以使用以下方法:

  1. getComponents():此方法返回 Element 的所有子组件的 Java List

  2. getComponents(String id):此方法与上面的类似,但将接受特定组件的服务器端 ID,并在找到时返回。

  3. getComponentCount():返回 Element 中存在的子组件的数量。

调用 JavaScript 函数

Element 组件提供两个 API 方法,可以在 HTML 元素上调用 JavaScript 函数。

  1. callJsFunction(String functionName, Object... arguments):此方法接受函数名称作为字符串,并可选择性传递一个或多个对象作为函数参数。此方法是同步执行的,这意味着 执行线程会被阻塞,直到 JS 方法返回,并导致往返。函数的结果作为 Object 返回,可以在 Java 中进行转换和使用。

  2. callJsFunctionAsync(String functionName, Object... arguments):与前一个方法类似,可以传递函数名称和可选的函数参数。此方法异步执行,并且 不会阻塞执行线程。它返回一个 PendingResult,允许进一步与函数及其负载进行交互。

传递参数

传递给这些方法的参数在执行 JS 函数时将以 JSON 数组序列化。有两种显著的参数类型处理如下:

  • this:使用 this 关键字将为方法提供对调用组件的客户端版本的引用。
  • Component:传递到某个 JsFunction 方法的任何 Java 组件实例将被替换为该组件的客户端版本。
信息

同步和异步函数调用将在 Element 被添加到 DOM 后再调用方法,但 callJsFunction() 不会等待任何 component 参数附加,这可能导致失败。相反,如果一个组件参数从未附加,调用 callJsFunctionAsync() 可能永远不会完成。

在下面的演示中,向 HTML Button 添加了一个事件。然后通过调用 callJsFunctionAsync() 方法以编程方式触发该事件。结果的 PendingResult 将用于在异步函数完成后创建另一个消息框。

显示代码

执行 JavaScript

除了从应用程序级别执行 JavaScript 外,还可以从 Element 级别执行 JavaScript。这种在 Element 级别执行的能力使 HTML 元素的上下文成为执行的一部分。这是一个强大的工具,让开发人员能够与客户端环境的交互能力。

与函数执行类似,可以使用以下方法来同步或异步执行 JavaScript:

  1. executeJs(String script):此方法接受 String,将在客户端作为 JavaScript 代码执行。此脚本是同步执行的,这意味着 执行线程会被阻塞,直到 JS 执行返回,导致往返。函数的结果作为 Object 返回,可以在 Java 中进行转换和使用。

  2. executeJsAsync(String script):与前一个方法相同,传递的 String 参数将在客户端作为 JavaScript 代码执行。此方法异步执行,并且 不会阻塞执行线程。它返回一个 PendingResult,允许进一步与函数及其负载进行交互。

提示

这些方法可以访问 component 关键字,这使 JavaScript 代码能够访问执行 JavaScript 的组件的客户端实例。