AEM - 如何将数据传递给组件
AEM - How to pass data to a component
通常 AEM 组件从 JCR 节点检索其数据,但我想知道是否可以在 HTL 中将数据传递给它。当然,有 data-sly-resource
,但据我所知,这种方式只能传递一个 JCR 节点。
所以在实际情况下,我在从其他地方检索的模型中获得了数据。但是我想使用现有组件。我知道数据必须至少与组件类型的模型匹配。
但是,如果我想使用的组件使用的模型注入了数据,如
@Inject
@Optional
String[] itemList;
所以在我固执的想法中,应该可以以某种方式传递一个字符串数组,比如
<div data-sly-resource="${myModel.aStringArray @ resourceType='my/component' }"></div>
但是就像上面提到的,这似乎只是为了传递节点。
有什么方法可以将数据直接传递给组件(除了创建模板)吗?
您可以以请求属性或选择器的形式传递附加信息
选择器
选择器是传递简单信息最直接的方式。这是一个可以传递的字符串数组。这对于可以充当标志 ex:
的数据非常有用
组件- Variant/Mode
- 列表中组件的索引(如果它包含在循环中)。
- 构建手风琴、标签等内容时父级的 ID
这种方法是对选择器的滥用,但恕我直言,只要您知道自己在做什么,这就不是主要问题。
<article data-sly-resource="${'path/to/resource' @ selectors=['s1', 's2']}"></article>
您可以在包含组件的同时添加、替换或删除选择器。查看语法文档。 https://docs.adobe.com/content/help/en/experience-manager-htl/using/htl/block-statements.html#resource
请求属性
此选项允许您向组件请求添加自定义请求属性。这可用于将对象作为参数传递给组件,同时包含它们。
这些是标准的 http 请求属性,可以将它们的范围限定为 script/resource 包含的特定实例。要使用它,您最终将需要一个模型 class 或 use-js,因为几乎没有支持组合要在视线中传递的数据。
<sly data-sly-use.settings="com.adobe.examples.htl.core.hashmap.Settings"
data-sly-include="${ 'productdetails.html' @ requestAttributes=settings.settings}" />
还有一个办法。您可以使用 data-sly-use 在初始化时将其他参数传递给 Sling 模型。例如:
<div data-sly-use.model="${'com.model.Teaser' @ test='abc'}"
您可以从请求中读取模型中的变量 "test":
@PostConstruct
private void initModel() {
String value = request.getAttribute("test");
// value is 'abc'
}
为了使其正常工作,您需要确保您的吊带模型能够根据要求进行调整@Model(adaptables = SlingHttpServletRequest.class}
通常 AEM 组件从 JCR 节点检索其数据,但我想知道是否可以在 HTL 中将数据传递给它。当然,有 data-sly-resource
,但据我所知,这种方式只能传递一个 JCR 节点。
所以在实际情况下,我在从其他地方检索的模型中获得了数据。但是我想使用现有组件。我知道数据必须至少与组件类型的模型匹配。
但是,如果我想使用的组件使用的模型注入了数据,如
@Inject
@Optional
String[] itemList;
所以在我固执的想法中,应该可以以某种方式传递一个字符串数组,比如
<div data-sly-resource="${myModel.aStringArray @ resourceType='my/component' }"></div>
但是就像上面提到的,这似乎只是为了传递节点。
有什么方法可以将数据直接传递给组件(除了创建模板)吗?
您可以以请求属性或选择器的形式传递附加信息
选择器
选择器是传递简单信息最直接的方式。这是一个可以传递的字符串数组。这对于可以充当标志 ex:
的数据非常有用-
组件
- Variant/Mode
- 列表中组件的索引(如果它包含在循环中)。
- 构建手风琴、标签等内容时父级的 ID
这种方法是对选择器的滥用,但恕我直言,只要您知道自己在做什么,这就不是主要问题。
<article data-sly-resource="${'path/to/resource' @ selectors=['s1', 's2']}"></article>
您可以在包含组件的同时添加、替换或删除选择器。查看语法文档。 https://docs.adobe.com/content/help/en/experience-manager-htl/using/htl/block-statements.html#resource
请求属性
此选项允许您向组件请求添加自定义请求属性。这可用于将对象作为参数传递给组件,同时包含它们。
这些是标准的 http 请求属性,可以将它们的范围限定为 script/resource 包含的特定实例。要使用它,您最终将需要一个模型 class 或 use-js,因为几乎没有支持组合要在视线中传递的数据。
<sly data-sly-use.settings="com.adobe.examples.htl.core.hashmap.Settings"
data-sly-include="${ 'productdetails.html' @ requestAttributes=settings.settings}" />
还有一个办法。您可以使用 data-sly-use 在初始化时将其他参数传递给 Sling 模型。例如:
<div data-sly-use.model="${'com.model.Teaser' @ test='abc'}"
您可以从请求中读取模型中的变量 "test":
@PostConstruct
private void initModel() {
String value = request.getAttribute("test");
// value is 'abc'
}
为了使其正常工作,您需要确保您的吊带模型能够根据要求进行调整@Model(adaptables = SlingHttpServletRequest.class}