通常,AEM组件是从JCR节点检索其数据,但我想知道是否有可能在HTL中将数据传递给它。当然可以,data-sly-resource
但是据我所知,您只能传递一个JCR节点。
因此,在实际情况下,我已经在从其他地方检索到的模型中获得了数据。但是我想使用现有的组件。我知道数据必须至少与组件类型的模型匹配。
但是,如果我要使用的组件是使用注入了数据的模型,该怎么办?
@Inject
@Optional
String[] itemList;
所以在我的顽固思想中,应该可以通过某种方式传递字符串数组
<div data-sly-resource="${myModel.aStringArray @ resourceType='my/component' }"></div>
但是如上所述,这似乎仅用于传递节点。
有什么方法可以完成将数据直接传递到组件的操作(除了创建模板之外)?
您可以以请求属性或选择器的形式传递其他信息
选择器是传递简单信息的最直接方法。这是可以传递的字符串数组。这对于可用作标志的数据非常有用,例如:
这种方法滥用了选择器,但是恕我直言,只要您知道自己在做什么,就不必担心。
<article data-sly-resource="${'path/to/resource' @ selectors=['s1', 's2']}"></article>
您可以在添加组件时添加,替换或删除选择器。查看文档中的语法。https://docs.adobe.com/content/help/zh-CN/experience-manager-htl/using/htl/block-statements.html#resource
此选项允许您将自定义请求属性添加到组件请求。当包含对象时,这可以用于将对象作为参数传递给组件。
这些是标准的http请求属性,可以说服它们将其范围限定为脚本/资源包含的特定实例。要使用它,您最终将需要一个模型类或use-js,因为几乎没有支持组合要直观传递的数据。
<sly data-sly-use.settings="com.adobe.examples.htl.core.hashmap.Settings"
data-sly-include="${ 'productdetails.html' @ requestAttributes=settings.settings}" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句