呈现网页中的组件后,可以生成一个 HTML 元素,以将呈现的组件封装在其中。这主要用于两个目的:
仅当组件与HTML元素封装时,才能编辑组件。
封装元素用于应用提供以下内容的HTML类:
对于开发人员而言,AEM 可提供清晰而简单的逻辑来控制用于封装所包含组件的修饰标记。装饰标签的呈现方式和呈现方式是由两个因素的组合来定义的,本页将深入讨论这两个因素:
以下是有关何时包含包装器元素的一些一般建议,有助于避免遇到意外问题:
以下属性和节点可应用于组件以控制其装饰标记的行为:
cq:noDecoration {boolean}
: 此属性可添加到组件,如果值为true,则强制AEM不在该组件上生成任何包装器元素。cq:htmlTag
节点: 此节点可添加到组件下,并可以具有以下属性:
cq:tagName {String}
: 这可用于指定用于封装组件的自定义HTML标记,而不是默认DIV元素。class {String}
: 这可用于指定要添加到包装器的css类名称。但是,包装器行为确实不同,具体取决于是使用HTL还是JSP来包含元素。
通常,HTL中的包装器行为可概括如下:
data-sly-resource="foo"
时)不呈现包装器DIV。也可以完全控制包装器的行为。
cq:noDecoration
和cq:tagName
)也可以定义包装器标记。可以完全控制HTL脚本中包装器标记的行为及其关联逻辑。
有关在HTL中进行开发的更多信息,请参阅HTL文档。
此决策树将总结用于确定包装器标记行为的逻辑。
以下三个用例提供了如何处理包装器标记的示例,并说明了控制包装器标记的所需行为是多么简单。
以下所有示例都假定具有以下内容结构和组件:
/content/test/
@resourceType = "test/components/one"
child/
@resourceType = "test/components/two"
/apps/test/components/
one/
one.html
two/
two.html
cq:htmlTag/
@cq:tagName = "article"
@class = "component-two"
最典型的用例是,由于代码重用的原因,组件包含其他组件时。 在这种情况下,不希望包含的组件通过其自己的工具栏和对话框进行编辑,因此不需要包装器,并且将忽略该组件的cq:htmlTag
。 这可以视为默认行为。
one.html: <sly data-sly-resource="child"></sly>
two.html: Hello World!
在/content/test.html
上生成输出:
Hello World!
例如,组件包括用于显示图像的核心图像组件,在这种情况下通常使用合成资源,该合成资源包括通过将表示组件将具有的所有属性的映射对象传递到数据 — 资源来包含虚拟子组件。
另一个常见用例是容器组件包含可编辑的子组件(如布局容器)时。 在这种情况下,每个包含的子项都必须需要一个包装器才能正常工作(除非使用cq:noDecoration
属性明确禁用)。
由于包含的组件在本例中是独立组件,因此它需要包装器元素才能使编辑器正常工作,并定义其布局和样式以应用。 要触发此行为,请使用decoration=true
选项。
one.html: <sly data-sly-resource="${'child' @ decoration=true}"></sly>
two.html: Hello World!
在/content/test.html
上生成输出:
<article class="component-two">Hello World!</article>
可能存在任意数量的复杂情况,HTL可以明确提供以下内容,从而轻松实现这些复杂情况:
decorationTagName='ELEMENT_NAME'
定义包装器的元素名称。cssClassName='CLASS_NAME'
定义要在其上设置的CSS类名称。one.html: <sly data-sly-resource="${'child' @ decorationTagName='aside', cssClassName='child'}"></sly>
two.html: Hello World!
结果输出/content/test.html
:
<aside class="child">Hello World!</aside>
当包含使用cq:includ
e或sling:include
的组件时,AEM中的默认行为是使用DIV来封装元素。 但是,可以通过两种方式自定义此包装:
cq:noDecoration
来封装组件。cq:htmlTag
/ cq:tagName
或decorationTagName
封装组件。以下决策树说明了cq:noDecoration
、cq:htmlTag
、cq:tagName
和decorationTagName
如何影响包装器行为。