使用数据源时 AEM 中 Select 小部件项的数据属性

Data attributes for Select widget items in AEM when using datasource

我想在 AEM 对话框中为 granite/ui/components/coral/foundation/form/select 小部件使用数据源机制。

我想在 HTML 个 select 项中呈现额外的数据属性。当不使用数据源并直接在对话框的 XML 文件中包含 select 项时,我可以使用 granite:data 节点添加数据属性:

<text
        jcr:primaryType="nt:unstructured"
        text="Text"
        value="text">
    <granite:data
            jcr:primaryType="nt:unstructured"
            custom-attribute="custom-attribute-value"/>
</text>

当项目来自数据源 Servlet 时,是否可以以某种方式包含数据属性?我正在为我的数据源 servlet 使用 this example code。特别是,我正在更新资源的值映射并将其返回到对话框。我可以用这个值映射做些什么来在特定元素的 HTML?

中呈现 `data-custom-attribute="custom-attribute-value"
private Resource getItemResource(ResourceResolver resolver, String text, String value) {
    ValueMap vm = new ValueMapDecorator(new HashMap<>());
    vm.put("text", text);
    vm.put("value", value);

    return new ValueMapResource(resolver, "", "", vm);
}

向此地图添加其他条目确实会导致呈现 granite/ui/components/foundation/form/select 的数据属性,但不会呈现我想使用的 granite/ui/components/coral/foundation/form/select 的数据属性。

我们可以将名称为 granite:data 的子节点添加到我们将从 DataSource servlet 返回的资源中。此子节点的属性将成为标记中的数据属性对。我认为使用 ValueMapResource 不可能像问题中那样使用,但可以使用存储在 JCR 中的真实资源来完成。

许多其他属性可以添加到原始资源(不是作为子资源),它们也会在 HTML 标记中呈现:

  • granite:id
  • granite:rel
  • granite:class
  • granite:title
  • granite:hidden
  • granite:itemscope
  • granite:itemtype
  • granite:itemprop